c# - 数据库更新语句中的无效列名错误
问题描述
barcode
我在 Microsoft SQL Server 中有一个数据库,其中包含一个由名为和的三列组成的package
表lab
。我正在尝试更新我作为输入获得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 所以我不明白我的错误是什么,但我相信这与更新语句有关。
解决方案
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();
推荐阅读
- ubuntu - 如何检查某个进程属于哪个用户?
- kotlin - 在 Ktor 应用程序模块而不是 Main 中获取命令行参数?
- r - 在 R 中生成带有替换的测试和训练数据集
- flutter - 如何在 VS Code 中同时开发 Flutter 应用和相关包
- python - Forward() parser_element 的奇怪的早期 EOF 终止
- php - “一些词 [word] (foo@bar.com)”的正则表达式
- r - 有没有办法用编码的文件名导入多个文件
- css - CSS左图像具有固定宽度和右内容动态
- python - Pyzipcode3没有找到可压缩的
- swift - Firebase RemoteConfigSettings 不反映 minimumFetchInterval 更改