如何使用DataTable.Select()解决过滤器值中单引号的问题

时间:2013-08-20 08:24:40

标签: c# sql

假设我希望在下面为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稍后会在我的代码中显示为动态

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

加倍像这样的任何单引号

...dt.Select("[ProductName] = '" + filterValue.Replace("'", "''") + "'")[0]["ProductCode"]

答案 2 :(得分: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"));