我正在开发一个c#数据库程序,但现在我无法使用DataTable的Select(字符串regExpression)方法。
我正在调用这样的方法:
DataRow[] tmpDr = tblUser.Select("user_id=JonDoe");
总是当我尝试这样做时,Select方法抛出异常"找不到列[JonDoe]。 "
但我对Select方法的理解是,在我的情况下,它选择来自tblUser的所有行,其中user_id = JonDoe。所以user_id是列,JonDoe是我要找的值。为什么Select函数假设JonDoe是表中的列?
感谢您的所有答案!
答案 0 :(得分:1)
您应该阅读DataTable.Expression
文档。特别是:
可以在表达式中使用用户定义的值与列值进行比较。字符串值应该用单引号括起来(字符串值中的每个单引号都必须通过在前面加上另一个单引号来转义。)
所以在这种情况下你想要:
DataRow[] tmpDr = tblUser.Select("user_id='JonDoe'");
您目前不在引号中指定值,因此它被视为对列的引用 - 就像在SQL中一样。
显然,这种方法容易受到与SQL相同类型的注入攻击......但据我所知,没有参数化查询的缓解功能。如果要过滤可能包含引号等的用户指定值,最好使用LINQ,例如
var rows = tblUser.AsEnumerable().Where(x => x.Field<string>("user_id") == userId);
答案 1 :(得分:0)
就像user_id
一样,JonDoe
被解析为列名。
要制作字符串文字,请将其用引号括起来。