我正在使用Dapper来查询SQL Anywhere数据源,并且我收到一个错误,使其看起来像是" @"我的where子句值的前缀被忽略。
Double balance = qb.Query<Double>("select end_balance_amt from QBReportAdminGroup.v_lst_customer where list_ident = @listid", new { listid = ListID }).Single();
错误:
Column '@listid' not found
我可以访问该表,我的手动查询工作正常。
select end_balance_amt from QBReportAdminGroup.v_lst_customer where list_ident = '8000000B-1433635931'
示例:
答案 0 :(得分:1)
找我试图使用未声明的变量@listid。
如果我在DB Anywhere中使用DBISQL,我会写这样的东西:
BEGIN
DECLARE @list varchar(20);
SET @list =&#39; 8000000B-1433635931&#39;;
从QBReportAdminGroup.v_lst_customer中选择end_balance_amt,其中list_ident = @ listid&#34 ;;
END
答案 1 :(得分:1)
对于SQL Anywhere及其.Net数据提供程序(至少为Sap.Data.SQLAnywherev4.5),参数应使用:
而不是@
作为前缀。
在我看来,这是您所遇到的问题。但是我不知道Dapper是否应该从其用户中抽象出此类供应商的特定行为。
所以您应该尝试:
Double balance = qb.Query<Double>(
"select end_balance_amt from QBReportAdminGroup.v_lst_customer where list_ident = :listid",
new { listid = ListID }).Single();