gpt4 book ai didi

c# - 使用 dapper 的通用参数化 sql 查询

转载 作者:太空狗 更新时间:2023-10-30 01:18:38 31 4
gpt4 key购买 nike

我正在使用这个通用方法:

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();

有什么想法吗?

附言:

错误是:

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

最佳答案

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

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

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

关于c# - 使用 dapper 的通用参数化 sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26466485/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com