【问题标题】:generic parameterised sql query with dapper使用 dapper 的通用参数化 sql 查询
【发布时间】:2014-10-20 13:08:26
【问题描述】:

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

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".

【问题讨论】:

  • 尝试用x替换@x
  • 您没有将objectParams 传递给Query 调用。是错字吗?

标签: c# dapper


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢。毕竟是星期一(-:
猜你喜欢
  • 2014-06-30
  • 2015-08-26
  • 2017-09-10
  • 2021-08-08
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 2011-09-25
  • 2014-05-13
相关资源
最近更新 更多