我正在尝试将参数绑定到我的存储库中的SQL查询但是有错误
public IList<Movie> FindMovieById(int movieId)
{
return Database.Connection().QuerySql<Movie>("select * from myDB.movies where ID=?", new { movieId });
}
我得到OleDb例外。
我用过吗?对于参数绑定,OleDb的位置参数由SQL0313:无效的主机变量数。 原因。 。 。 。 。 :EXECUTE或OPEN语句中指定的SQLDA或描述符区域中的主机变量或条目数与准备的SQL语句S000001中指定的参数标记数不同。如果语句名称为* N,则在OPEN语句中指定SQLDA或描述符区域中的主机变量或条目数,并且与游标C000001的DECLARE CURSOR语句中指定的主机变量数不同。恢复。 。 。 :更改USING子句中指定的主机变量数或SQLDA或描述符区域中的条目数,以等于准备好的SQL语句中的参数标记数或DECLARE CURSOR语句中的主机变量数。再次预编译程序。
'?'
而不是'@parameterName'
表示。
感谢任何帮助。
答案 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上打开一个问题,我可以看一下。