-1

barcode我在 Microsoft SQL Server 中有一个数据库,其中包含一个由名为和的三列组成的packagelab。我正在尝试更新我作为输入获得lab的特定字段。barcode这是我尝试过的:

object[] args = { LabName, currentBarcode };
sql = string.Format("UPDATE BarcodesData SET Lab = {0} WHERE Barcode = {1}", args);
Adapter.UpdateCommand = new SqlCommand(sql, cnn);
Adapter.UpdateCommand.ExecuteNonQuery();

不幸的是,我收到“列名无效”的错误。数据库中的列名是 Lab 所以我不明白我的错误是什么,但我相信这与更新语句有关。

4

2 回答 2

3

SQL 中的字符串文字用单引号 ( ') 表示。没有它们,您格式化为 SQL 字符串的参数将被解释为列名,并且您会收到错误,因为没有这样的列。

您可以引用这些值:

sql = string.Format("UPDATE BarcodesData SET Lab = '{0}' WHERE Barcode = '{1}'", args);
// Here -------------------------------------------^---^-----------------^---^

但这仍然是一种不好的做法,如果这些参数是从用户输入或任何不受信任的数据中获取的,那么您的代码就会容易受到 SQL 注入攻击。

更好的做法是使用绑定变量:

sql = "UPDATE BarcodesData SET Lab = @lab WHERE Barcode = @barcode";
Adapter.UpdateCommand = new SqlCommand(sql, cnn);
Adapter.UpdateCommand.Parameters.AddWithValue("@lab", LabName);
Adapter.UpdateCommand.Parameters.AddWithValue("@barcode", currentBarCode);
Adapter.UpdateCommand.ExecuteNonQuery();
于 2020-09-26T19:43:43.683 回答
-1

您必须使用 Reserve update tablename set [Lab]=1 where [Barcode]=1

于 2020-09-26T19:39:17.397 回答