首页 > 解决方案 > 数据库更新语句中的无效列名错误

问题描述

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 所以我不明白我的错误是什么,但我相信这与更新语句有关。

标签: c#sql-serversql-update

解决方案


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

推荐阅读