带有dapper的通用参数化sql查询

本文关键字:sql 查询 参数 dapper 带有 | 更新日期: 2023-09-27 18:27:13

我使用的是这个通用方法:

protected IEnumerable<T> ExecuteSprocQuery<T>(string sproc, object objectParams)
{
    using (var conn = OpenConnection())
    {
    var list = conn.Query<T>(sproc, null, commandType: CommandType.StoredProcedure);
    return list;
    }
}

调用这样的存储过程:

ExecuteSprocQuery<SomePoco>("SomeSproc", new { P1 = p1, P2 = p2 }).ToList().FirstOrDefault();

我正在尝试为参数化sql查询实现类似的功能:

protected IEnumerable<T> ExecuteQuery<T>(string sqlString, object objectParams)
{
    using (var conn = OpenConnection())
    {
    var list = conn.Query<T>(sqlString, null, commandType: CommandType.Text);
    return list;
    }
}

但是像这样的东西抛出了一个错误:

ExecuteQuery<int?>("Select id from [dbo].[TableName] where [X] = @x ", new { @x  = 1}).FirstOrDefault();

有什么想法吗?

PS:

错误为:

Additional information: Must declare the scalar variable "@x".

带有dapper的通用参数化sql查询

看起来您从未在方法内部将params对象传递给Query()。如果没有SP的代码,这很难说,但它可能会接受null作为参数,从而不会失败,而原始SQL很可能只是崩溃。

var list = conn.Query<T>(sproc, objectParams, commandType: CommandType.StoredProcedure);
var list = conn.Query<T>(sqlString, objectParams, commandType: CommandType.Text);