6

我正在使用带有.SqlQuery(string sql)命令的 EF 执行一些 SQL。

我想确保我的 sql 字符串被完全清理,所以逻辑方法是使用SqlCommand带有参数的对象来构建它。

但是我不想使用 SqlCommand 执行它,我只想让 SqlCommand 吐出一个可以插入到我的 EF.SqlQuery(...)调用中的字符串。

有没有办法做到这一点,或者另一种方法来确保我.SqlQuery不会导致注射?

4

2 回答 2

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"));
于 2013-07-25T14:39:33.193 回答
0

获取 SqlCommand 的 CommandText 属性。

string query = cmd.CommandText;

foreach (SqlParameter p in cmd.Parameters)
{
    query = query.Replace(p.ParameterName, p.Value.ToString());
}
于 2013-07-25T14:23:14.863 回答