C#;SQL Server:更新不完整(字符串类型)
本文关键字:字符串 类型 SQL Server 更新 | 更新日期: 2023-09-27 18:21:09
我试图用字符串更新列,但它没有正确更新。
我在update函数之前显示string
,即使在它作为参数(tip_reparatii
,来自函数)传递之后,它也是相同的字符串,但不会在数据库中更新。
更新功能:
public void updateInventar ( int ID_INVENTAR, int ID_CEAS, DateTime data_intrare, string tip_reparatii, string pret, int tip_contact1, int ok_refuse, int tip_contact2, DateTime ok_refuse_date, int ID_STATUS, int ID_LOCALIZARE, DateTime data_iesire, string note, int ID_TEHNICIAN ) {
if ( IsOnline() ) {
try {
string sqlInsertQuery = "UPDATE dbo.Inventar SET data_intrare=@data_intrare, tip_reparatii=@tip_reparatii, pret=@pret, tip_contact1=@tip_contact1, ok_refuse=@ok_refuse, tip_contact2=@tip_contact2, ok_refuse_date=@ok_refuse_date, ID_STATUS=@ID_STATUS, ID_LOCALIZARE=@ID_LOCALIZARE, data_iesire=@data_iesire, note=@note,ID_TEHNICIAN=@ID_TEHNICIAN WHERE ID_INVENTAR=@ID_INVENTAR AND ID_CEAS=@ID_CEAS";
SqlCommand cmd = new SqlCommand(sqlInsertQuery, DbCon);
MessageBox.Show(tip_reparatii); //this is the same string and it's correct
cmd.Parameters.AddWithValue("@data_intrare", data_intrare);
cmd.Parameters.AddWithValue("@tip_reparatii", tip_reparatii);
cmd.Parameters.AddWithValue("@pret", pret);
cmd.Parameters.AddWithValue("@tip_contact1", tip_contact1);
cmd.Parameters.AddWithValue("@ok_refuse", ok_refuse);
cmd.Parameters.AddWithValue("@tip_contact2", tip_contact2);
cmd.Parameters.AddWithValue("@ok_refuse_date", ok_refuse_date);
cmd.Parameters.AddWithValue("@ID_STATUS", ID_STATUS);
cmd.Parameters.AddWithValue("@ID_LOCALIZARE", ID_LOCALIZARE);
cmd.Parameters.AddWithValue("@data_iesire", data_iesire);
cmd.Parameters.AddWithValue("@note", note);
cmd.Parameters.AddWithValue("@ID_TEHNICIAN", ID_TEHNICIAN);
cmd.Parameters.AddWithValue("@ID_INVENTAR", ID_INVENTAR);
cmd.Parameters.AddWithValue("@ID_CEAS", ID_CEAS);
cmd.ExecuteNonQuery();
} catch ( SqlException e ) {
MessageBox.Show(null, "Could not Update! " + e.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
} else {
MessageBox.Show(null, "SQL Connection Throttled!", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
呼叫代码:
private void btnActualiser_Click(object sender, EventArgs e)
{
string tipReparatiiString = "";
if (this.cblReparatii.CheckedItems.Count > 0)
{
foreach (DataRowView itm in cblReparatii.CheckedItems)
{
tipReparatiiString += itm.Row.ItemArray[0].ToString() + " ";
}
MessageBox.Show(tipReparatiiString); //this is correct
obj.updateInventar(int.Parse(this.cblReparatii.SelectedValue.ToString()), int.Parse(this.cbCeas.SelectedValue.ToString()), this.dtDataIn.Value, tipReparatiiString, this.tbPrix.Text, this.cbPrin.SelectedIndex, this.cbOkRef.SelectedIndex, this.cbPrin2.SelectedIndex, this.dtOkRef.Value, int.Parse(this.cbStatus.SelectedValue.ToString()), int.Parse(this.cbLocatie.SelectedValue.ToString()), this.dtDataOut.Value, this.tbNote.Text, int.Parse(this.cbTehnician.SelectedValue.ToString()));
}
else
{
//Msg
}
}
两个消息框都显示正确的字符串,但它不会在数据库中更新,或者有时更新不正确(字符串的一部分)。
我们手动添加了一个string
作为参数,它起作用了:
obj.updateInventar(int.Parse(this.cblReparatii.SelectedValue.ToString()),
int.Parse(this.cbCeas.SelectedValue.ToString()),
this.dtDataIn.Value, "this works perfectly",
this.tbPrix.Text, this.cbPrin.SelectedIndex,
this.cbOkRef.SelectedIndex, this.cbPrin2.SelectedIndex,
this.dtOkRef.Value,
int.Parse(this.cbStatus.SelectedValue.ToString()),
int.Parse(this.cbLocatie.SelectedValue.ToString()),
this.dtDataOut.Value, this.tbNote.Text,
int.Parse(this.cbTehnician.SelectedValue.ToString()) );
其他值将正确更新。
而不是使用cmd。参数。AddWithValue("@tip_paratii",tip_parati);
尝试:
cmd.Parameters.Add("@tip_paratii",SqlDbType.NVarChar).Value=tip_parati;
或者具有大小参数,例如cmd。参数.Add("@tip_paratii",SqlDbType.NVarChar,200).Value=tip_parati;
您应该为所有SQL命令参数执行这种类型的添加操作。