更新查询:语法不正确(已编辑)

时间:2010-12-08 20:06:14

标签: sql

我有一个按钮,用于在我的UI设计中保存在datagridview中编辑的内容。这是Button_Save的代码:

    public void btnUpdate_Click(object sender, EventArgs e)
    {

        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
                 System.Data.SqlClient.SqlConnection sqlConnection1 =
                 new System.Data.SqlClient.SqlConnection("server=Test; Integrated Security=true; Database=Test;");

                System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
 var sql = new StringBuilder();
                sql.AppendLine("UPDATE dbo.JobStatus");
                sql.AppendLine("Set ShipTrackingNumber = @ShipTrackingNumber");
                sql.AppendLine(", ShipMethodTransmitted = @ShipMethodTransmitted");
                sql.AppendLine(", DateShipTransmitProcessed = @DateShipTransmitProcessed");
                sql.AppendLine(", ShipmentProcessedBy = @ShipmentProcessedBy");
                sql.AppendLine(", Critical = @Critical");
                sql.AppendLine(", ShipTransmitStatus = @ShipTransmitStatus");
                sql.AppendLine("Where jobtableId = @jobTableId");

                cmd.Connection = sqlConnection1;
                cmd.CommandText = sql.ToString();
                cmd.Parameters.AddWithValue("@TrackingNumber", row.Cells[7].FormattedValue);
                cmd.Parameters.AddWithValue("@ShipMethodTransmitted", row.Cells[8].FormattedValue);

                cmd.Parameters.AddWithValue("@DateShipTransmitProcessed", row.Cells[9].FormattedValue);
                cmd.Parameters.AddWithValue("@ShipmentProcessedBy", row.Cells[10].FormattedValue);
                cmd.Parameters.AddWithValue("@Critical", row.Cells[11].FormattedValue);
                cmd.Parameters.AddWithValue("@ShipTransmitStatus", row.Cells[13].FormattedValue);
                cmd.Parameters.AddWithValue("@jobTableId", row.Cells[5].FormattedValue);


                sqlConnection1.Open();
                cmd.ExecuteNonQuery();
                sqlConnection1.Close();

我得到的错误是:“必须声明标量变量”@ShipTrackingNumber“。 我不想从代码中放入ShipTrackingNumber。相反,我想从UI中获取它。

我在这里做错了什么?

3 个答案:

答案 0 :(得分:1)

嗯,“cmd.Parameters”中@ShipTrackingNumber没有条目。 “从UI中获取”是什么意思?你可以写一行来为这个参数添加一个条目:

cmd.Parameters.AddWithValue("@ShipTrackingNumber", GetShipTrackingNumberFromUI());

然后实施GetShipTrackingNumberFromUI()以获得您想要的值。

看起来这一行应该是这些行,但你需要将“@TrackingNumber”更改为“@ShipTrackingNumber”:

cmd.Parameters.AddWithValue("@TrackingNumber", row.Cells[7].FormattedValue);

答案 1 :(得分:0)

要回答直接问题,请添加参数及其从UI获取的值。假设它是一个名为CheckBox1的复选框:

cmd.Parameters.AddWithValue("@ShipTrackingNumber", CheckBox1.Checked);

答案 2 :(得分:0)

您需要替换此行:

cmd.Parameters.AddWithValue("@TrackingNumber", row.Cells[7].FormattedValue);

这一行:

cmd.Parameters.AddWithValue("@ShipTrackingNumber", row.Cells[7].FormattedValue);