【发布时间】:2013-04-04 17:59:47
【问题描述】:
这行得通:
dynSQL = "SELECT * FROM inventory WHERE vendor_item = '" + VendorItem + "' ";
...但这不是:
dynSQL = string.Format("SELECT * FROM inventory WHERE vendor_item = {0}", VendorItem);
后者导致“找不到表0”
这是另一个尝试美化代码的例子,让我从鞍座上跳到硬盘上。
将 where 子句 arg 包含在由外部单引号标记的双引号中真的是要走的路吗?必须有更好的方法(比我的“更好的方法”(这很好,除了它不起作用))。
【问题讨论】:
-
您的第二个示例不包括 {0} 周围的单引号。故意的?
-
我认为不需要它们;如果是,那就是问题所在。
-
您为什么认为不需要它们?为什么不发布从字符串创建的 SQL?向我们展示
dynSQL在第二种情况下的样子,而不是仅仅给出错误消息,我们会看看它是否有意义,嗯? -
@ErikE:我想我期待因为 string.Format() 通常“正常工作”,IOW,你不必告诉它:这是一个字符串,这是一个 int,等等。它足够聪明,可以为您进行这些转换。我知道我错了。
-
string.Format可以很好地完成工作,将其转换为字符串。问题是,它对 SQL 以及将结果字符串用单引号括起来的需要一无所知。为什么会这样做?如果它每次都这样做,你会得到奇怪的输出。想象一下string.Format("The number you chose was {0}.", "9")--你会期待The number you chose was '9'.的结果吗?
标签: sql sql-server-ce string-formatting string.format