【发布时间】:2011-03-02 16:20:13
【问题描述】:
ADO.NET 是否清理字符串类型 SqlParameters 中的通配符(即“%”或“_”)?另外,有必要吗?我试过用谷歌搜索,但很难找到我想知道的确切内容。
例如,假设我有一个参数化查询:
string sql = "SELECT * FROM Users WHERE UserName LIKE @prefix";
SqlCommand command = new SqlCommand(sql, connection);
command.Parameters.AddWithValue("prefix", User.UserName);
//etc...
但用户不知何故设法让自己获得了一个像% 这样的用户名。他的想法是他将看到所有用户,而不仅仅是他应该看到的用户。这会起作用吗,或者% 会在参数化时获得 a) 转义,或者 b) 被 SQL 服务器评估为文字 %?
请注意,我意识到上述设计将是一个非常糟糕的设计。这只是一个虚构的例子。
编辑:我已通过测试确认选项 b) 不会发生。
declare @prefix as varchar(10);
set @prefix = '%';
select * from MyTable where MyField like @prefix;
--returns everything
【问题讨论】:
标签: .net sql ado.net parameters