我正在使用.Net中的ODBC命令对象构建一个查询,并传入了多个参数。在对SQL Anywhere执行查询时,我收到以下错误。 (相同的代码适用于SQL Server)。
[System.Data.Odbc.OdbcException] = {“错误[07002] [Sybase] [ODBC驱动程序] [SQL Anywhere]主机变量值不足”}
命令对象与查询中的占位符('?')添加的参数数量相同。以下是一个简单的查询和C#代码,无法通过测试。
填充主变量的C#代码
String queryText = @“DECLARE @loanuseraddress varchar(40),@ loanid decimal 设置@loanid =? 设置@loanuseraddress =? 从loan_assignments中选择*,其中loan_id = @loanid“
OdbcConnection connection = new OdbcConnection(request.ConnectionString);
OdbcCommand command;
command = new OdbcCommand(queryText, connection);
OdbcParameter param1 = new OdbcParameter("@loanid", OdbcType.Decimal);
param1.Value = request.Loan.LoanNumber;
command.Parameters.Add(param1);
OdbcParameter param2 = new OdbcParameter("@loanuseremployer", dbcType.VarChar);
param2.Value = appraisalCompanyUpdate.LoanUserEmployer;
if (param2.Value == null)
param2.Value = DBNull.Value;
command.Parameters.Add(param2);
connection.Open();
OdbcDataReader rows = command.ExecuteReader();
答案 0 :(得分:4)
我通过检查空值来解决这个问题。当您尝试将空参数传递给Sybase时,这就是您得到的错误(至少对我而言)。感觉LoanId在某些时候是空的。
编辑在做了一些研究后,我认为当您通过.Net中的Sybase ODBC连接尝试多次插入/删除/更新时,您也会收到此错误。我不认为这是支持的,MSDN似乎说这是供应商特定的。
答案 1 :(得分:2)
“主机变量不足”也可能意味着什么,但它适用于OP: 其中一个原因可能是你有一组声明的变量与你的SQL语句使用的集合不同。
E.g。这可能是一个错字,或者您可以从Visual Studio中复制用于使用参数(如:parm
)填充数据集表的SQL,但这样做就忘了声明它(@parm
)在你的存储过程或开始/结束块中。