这有效:
dynSQL = "SELECT * FROM inventory WHERE vendor_item = '" + VendorItem + "' ";
......但这不是:
dynSQL = string.Format("SELECT * FROM inventory WHERE vendor_item = {0}", VendorItem);
后者导致“找不到表0”
这是另一个尝试将代码从马鞍上敲下来,然后进入硬盘的尝试。
将外部单引号加入书签的双引号中的where子句arg包装真的要走了吗?必须有一个更好的方法(比我的“更好的方式”更好(除非它不起作用,这很好))。
答案 0 :(得分:3)
有一种更好的方法。无论你使用什么语言(你没有指定 - string.Format
部分)无疑支持参数化的SQL执行。停止连接,而是使用参数。
例如,in 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而不是“'NULL'”。
另外需要注意的是,您的第二个代码段在令牌周围没有单引号。但即使你让它“正常工作”,你仍然容易受到SQL注入的影响。最佳做法是使用参数化SQL。