我正在使用带有.SqlQuery(string sql)
命令的 EF 执行一些 SQL。
我想确保我的 sql 字符串被完全清理,所以逻辑方法是使用SqlCommand
带有参数的对象来构建它。
但是我不想使用 SqlCommand 执行它,我只想让 SqlCommand 吐出一个可以插入到我的 EF.SqlQuery(...)
调用中的字符串。
有没有办法做到这一点,或者另一种方法来确保我.SqlQuery
不会导致注射?
我正在使用带有.SqlQuery(string sql)
命令的 EF 执行一些 SQL。
我想确保我的 sql 字符串被完全清理,所以逻辑方法是使用SqlCommand
带有参数的对象来构建它。
但是我不想使用 SqlCommand 执行它,我只想让 SqlCommand 吐出一个可以插入到我的 EF.SqlQuery(...)
调用中的字符串。
有没有办法做到这一点,或者另一种方法来确保我.SqlQuery
不会导致注射?
EF 不支持开箱即用吗?
您应该能够SqlQuery
使用参数调用,因此它将处理 SQL 注入等,就像这样SqlCommand
做:
var tests = context.Database.SqlQuery<Test>(
@"SELECT Id, Name FROM tests where Name={0}", "TestName");
或者..
var tests = context.Database.SqlQuery<Test>(
@"SELECT Id, Name FROM tests where Name=@name",
new SqlParameter("@name", "TestName"));
获取 SqlCommand 的 CommandText 属性。
string query = cmd.CommandText;
foreach (SqlParameter p in cmd.Parameters)
{
query = query.Replace(p.ParameterName, p.Value.ToString());
}