0

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

任何帮助表示赞赏。

4

2 回答 2

1

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

return Database.Connection().QuerySql<Movie>(
  "select * from myDB.movies where ID=@movieId", 
  new { movieId = movieId });
于 2014-02-13T16:05:05.223 回答
0

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

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

new { movieId }

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

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

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

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

于 2014-04-28T20:05:27.333 回答