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()) );  

其他值将正确更新。

C#;SQL Server:更新不完整(字符串类型)

而不是使用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命令参数执行这种类型的添加操作。