无法绑定Insight.Database中的参数

时间:2014-01-23 10:12:38

标签: oledb dapper micro-orm insight.database

我正在尝试将参数绑定到我的存储库中的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'表示。

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

使用Insight.Database可以试试吗?

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

答案 1 :(得分:0)

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

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

new { movieId }

我相信编译器会生成一个名为&#34; MovieID&#34;

的属性

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

如果您的数据库不支持命名参数,请在github上打开一个问题,我可以看一下。

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

相关问题