【问题标题】:Unable to bind parameter in Insight.Database无法在 Insight.Database 中绑定参数
【发布时间】:2014-01-23 10:12:37
【问题描述】:

我正在尝试将参数绑定到存储库中的 SQL 查询,但出现错误

public IList<Movie> FindMovieById(int movieId)
{
   return Database.Connection().QuerySql<Movie>("select * from myDB.movies where ID=?", new { movieId });
}

我得到一个 OleDb 异常。

SQL0313:主机变量数无效。 原因 。 . . . . : 在 EXECUTE 或 OPEN 语句中指定的 SQLDA 或描述符区域中的主变量或条目的数量与在准备好的 SQL 语句 S000001 中指定的参数标记的数量不同。如果语句名称为 *N,则在 OPEN 语句中指定了 SQLDA 或描述符区域中的主变量或条目数,并且与游标 C000001 的 DECLARE CURSOR 语句中指定的主变量数不同。恢复 。 . . : 将 USING 子句中指定的主变量数或 SQLDA 或描述符区域中的条目数更改为等于准备好的 SQL 语句中的参数标记数或 DECLARE CURSOR 语句中的主变量数。再次预编译程序。

我用过?用于参数绑定,因为 OleDb 具有由 '?' 而不是 '@parameterName' 表示的位置参数。

感谢任何帮助。

【问题讨论】:

  • 您是否尝试过使用@parameterName 语法?
  • @sirchristian 是的,它不适用于@
  • 您能否发布不适用于@parameterName 的C#?

标签: oledb dapper micro-orm insight.database


【解决方案1】:

使用 Insight.Database 可以试试这个吗?

return Database.Connection().QuerySql<Movie>(
  "select * from myDB.movies where ID=@movieId", 
  new { movieId = movieId });

【讨论】:

    【解决方案2】:

    为了让 Insight 将查询映射到对象,它按名称绑定参数,而不是按位置。

    您的参数对象可以是匿名类型。如果您指定:

    new { movieId }
    

    我相信编译器会生成一个名为“MovieID”的属性

    在这种情况下,您的参数应该称为@movieId。

    如果你的数据库不支持命名参数,请在github上开一个issue,我可以看看。

    https://github.com/jonwagner/Insight.Database/issues

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多