0

这有效:

dynSQL = "SELECT * FROM inventory WHERE vendor_item = '" + VendorItem + "' ";

...但这不是:

dynSQL = string.Format("SELECT * FROM inventory WHERE vendor_item = {0}", VendorItem);

后者导致“找不到表 0”

这是另一个尝试美化代码的例子,它把我从马鞍上撞到了硬盘上。

将 where 子句 arg 包含在由外部单引号标记的双引号中真的是要走的路吗?必须有更好的方法(比我的“更好的方法”(这很好,除了它不起作用))。

4

1 回答 1

3

有一个更好的办法。无论您使用哪种语言(您没有指定——该string.Format部分),无疑都支持参数化 SQL 执行。停止连接,而是使用参数。

例如,在 C# Entity Framework 中,您将执行以下操作:

string esqlQuery = @"SELECT * FROM inventory WHERE vendor_item = @vendoritem";

using (EntityCommand cmd = new EntityCommand(esqlQuery, conn)) {
   EntityParameter vendoritem = new EntityParameter();
   vendoritem.ParameterName = "vendoritem";
   vendoritem.Value = VendorItem;

   cmd.Parameters.Add(vendoritem);
   // go on to execute it as shown in the above link
}

通过创建一个命令并执行它,一切都会为您完成:参数放置和格式化,包括用单引号包裹字符串和转义单引号或使用“NULL”代替“'NULL'”。

另一个注意事项是,您的第二个代码片段在令牌周围没有单引号。但即使你让它“工作”了,你仍然容易受到 SQL 注入的影响。最佳实践是改用参数化 SQL。

于 2013-04-04T18:01:52.290 回答