【发布时间】:2017-12-04 23:16:50
【问题描述】:
首先,我使用的是 MS Access OleDb,我多次尝试使用和不使用 UPDATE SQL 查询的参数。
照片更新现在不是事实,当我尝试更新按钮时,我得到:
条件表达式中的数据类型不匹配。
那个错误让我发疯,请帮助我。谢谢!
ktN 来自KayitNo 作为标题中的Public Int32,当我单击数据网格进行更新时(那时将其他列检索到文本框和 datetimePickers 等)
OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=TSP.accdb");
OleDbCommand komut = new OleDbCommand("UPDATE TSP_Data SET SeriNo=@SeriNo,PartNo=@PartNo,PID=@PID,Model=@Model,UretimTarihi=@UretimTarihi,Teknisyen=@Teknisyen,ServisGiris=@ServisGiris,Ariza=@Ariza,TeknisyenNotu=@TeknisyenNotu,YapilanIslem=@YapilanIslem,MudahaleSonucu=@MudahaleSonucu,BoardUzerindekiYeri=@BoardUzerindekiYeri,TamirSeviyesi=@TamirSeviyesi,SonKontrolSonucu=@SonKontrolSonucu,TeslimEdilenTarih=@TeslimEdilenTarih,UrunDurumu=@UrunDurumu Where KayitNo="+ktN,con);
komut.Parameters.AddWithValue("@SeriNo",Convert.ToString(sNText.Text));
komut.Parameters.AddWithValue("@PartNo", Convert.ToString(partNoText.Text));
komut.Parameters.AddWithValue("@PID",pidText.Text);
komut.Parameters.AddWithValue("@Model",Convert.ToString(modelText.Text));
komut.Parameters.AddWithValue("@UretimTarihi",uretimTarihi.Value);
komut.Parameters.AddWithValue("@Teknisyen", Convert.ToString(teknisyenSec.SelectedItem));
komut.Parameters.AddWithValue("@ServisGiris", serviseGirisTarihi.Value);
komut.Parameters.AddWithValue("@Ariza", Convert.ToString(arizaText.Text));
komut.Parameters.AddWithValue("@TeknisyenNotu", Convert.ToString(teknisyenNotuText.Text));
komut.Parameters.AddWithValue("@YapilanIslem", Convert.ToString(yapilanIslemText.Text));
komut.Parameters.AddWithValue("@MudahaleSonucu", Convert.ToString(mudahaleSonucuSec.SelectedItem));
komut.Parameters.AddWithValue("@BoardUzerindekiYeri", Convert.ToString(boardYeriText.Text));
komut.Parameters.AddWithValue("@TamirSeviyesi", Convert.ToString(tamirSeviyesiSec.SelectedItem));
komut.Parameters.AddWithValue("@CaseID", caseIDText.Text);
komut.Parameters.AddWithValue("@SonKontrolSonucu", Convert.ToString(sonKontrolSonucuSec.SelectedItem));
komut.Parameters.AddWithValue("@TeslimEdilenTarih", teslimEdilenTarih.Value);
komut.Parameters.AddWithValue("@UrunDurumu", Convert.ToString(urunDurumuSec.SelectedItem));
// komut.Parameters.Add("@Foto", OleDbType.Binary, foto.Length).Value = foto; con.Open(); komut.ExecuteNonQuery(); con.Close(); MessageBox.Show("成功");
表格设计顺序如下:
KayitNo(Int,PK,AutomaticNumber)
SeriNo(Long Text)
PartNo(Long Text)
PID(Int)
Model(Long Text)
UretimTarihi(Date/Time)
Teknisyen(Text)
ServisGiris(Date/Time)
Ariza(Long Text)
TeknisyenNotu(Long Text)
YapilanIslem(Long Text)
MudahaleSonucu(Long Text)
BoardUzerindekiYeri(Long Text)
TamirSeviyesi(Long Text)
CaseID (Int)
SonKontrolSonucu(Text)
TeslimEdilenTarih(Date/Time)
UrunDurumu(LongText)
Foto(OLE OBJECT)
【问题讨论】:
-
为什么当你为所有其他变量使用参数时,你随机不使用 ktN 参数?您应该参数化所有输入值。至于错误,您的任何变量都可能输入错误,但很可能是整数或日期变量。检查输入的内容是否有效。如果不是 - 为什么不呢?您的应用程序应该正在验证条目。特别是如果你有日期,把它们变成 DateTime 对象,而不仅仅是字符串。
-
尝试 Convert.ToDateTime 'komut.Parameters.AddWithValue("@ServisGiris", Convert.ToDateTime(serviseGirisTarihi.Value));'
-
@ChrisCatignani 我做了,没有任何改变。
-
CaseID 是一个 int 并且您也没有转换它。
-
@ADyson 您保存了我的程序先生!我只是一一尝试,我发现了错误。谢谢!