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