我正在使用带有.SqlQuery(string sql)
命令的EF执行一些SQL。
我想确保我的sql字符串已完全清理,因此逻辑方法是使用带有参数的SqlCommand
对象来构建它。
但是我不想使用SqlCommand执行它,我只是希望SqlCommand吐出一个字符串,我可以插入我的EF .SqlQuery(...)
调用。
有没有办法做到这一点,或者另一种确保我的.SqlQuery
不会导致注射的方法?
答案 0 :(得分:12)
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"));
答案 1 :(得分:0)
获取SqlCommand的CommandText属性。
string query = cmd.CommandText;
foreach (SqlParameter p in cmd.Parameters)
{
query = query.Replace(p.ParameterName, p.Value.ToString());
}