【发布时间】:2010-09-23 02:54:28
【问题描述】:
.Net 中的参数化查询在示例中总是如下所示:
SqlCommand comm = new SqlCommand(@"
SELECT *
FROM Products
WHERE Category_ID = @categoryid
",
conn);
comm.Parameters.Add("@categoryid", SqlDbType.Int);
comm.Parameters["@categoryid"].Value = CategoryID;
但我在尝试执行以下操作时遇到了障碍:
SqlCommand comm = new SqlCommand(@"
SELECT *
FROM Products
WHERE Category_ID IN (@categoryids)
OR name LIKE '%@name%'
",
conn);
comm.Parameters.Add("@categoryids", SqlDbType.Int);
comm.Parameters["@categoryids"].Value = CategoryIDs;
comm.Parameters.Add("@name", SqlDbType.Int);
comm.Parameters["@name"].Value = Name;
在哪里
- CategoryIDs 是逗号分隔的数字列表“123,456,789”(不带引号)
- 名称是一个字符串,可能带有单引号和其他错误字符
什么是正确的语法?
【问题讨论】:
-
在“IN”子句中,您必须指定 SQL 命令中的每个值。并且 evenry 值添加到“参数”集合中。如果通过参数值将字符串值传递给SQL,则一定不要害怕sql注入。
-
你可以像
WHERE name LIKE CONCAT('%', ?, '%')这样写你的查询
标签: .net sql parameters sql-injection parameterized