2

假设我希望productCode为下面的变量分配名为的产品的产品代码Cookie's

注意中的“'”,ProductName因为它是导致以下语句失败的原因。基本上,过滤器表达式中的“'”会导致错误的 SQL 语法。

我会很感激你们的任何想法。

DataTable dt=PullSomeDataFromProductTableDatabase();
string filterValue="Cookie's";
string productCode=dt.Select("[ProductName]='"+filterValue+"'")[0]["ProductCode"]

第 (3) 行失败,因为它和说的一样

Select ProductCode from Products Where ProductName='Cookie's';

这在过滤器表达式中引入了 3 个单引号。因此错误。请注意,这FilterValue意味着稍后在我的代码中是动态的

4

3 回答 3

4

尝试string filterValue="Cookie''s";

或者

string filterValue="Cookie'+CHAR(39)+'s";

于 2013-08-20T08:27:57.743 回答
3

像这样加倍任何单引号

...dt.Select("[ProductName] = '" + filterValue.Replace("'", "''") + "'")[0]["ProductCode"]
于 2013-08-20T08:32:11.113 回答
2

使用 LINQ,这将使您的解决方案更简单、更通用。否则,您最终会用转义字符替换过滤器中的单引号(和其他特殊字符)。

DataTable dt=PullSomeDataFromProductTableDatabase();
string filterValue="Cookie's";
string productCode=dt.AsEnumerable()
                     .Where(row => row.Field<string>("ProductName") == filterValue)
                     .FirstOrDefault(row => row.Field<string>("ProductCode"));
于 2013-08-20T08:33:59.393 回答