SQL Anywhere查询错误:主机变量的值不足

时间:2010-11-08 19:41:34

标签: c# .net odbc sqlanywhere

我正在使用.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();

2 个答案:

答案 0 :(得分:4)

我通过检查空值来解决这个问题。当您尝试将空参数传递给Sybase时,这就是您得到的错误(至少对我而言)。感觉LoanId在某些时候是空的。

编辑在做了一些研究后,我认为当您通过.Net中的Sybase ODBC连接尝试多次插入/删除/更新时,您也会收到此错误。我不认为这是支持的,MSDN似乎说这是供应商特定的。

答案 1 :(得分:2)

“主机变量不足”也可能意味着什么,但它适用于OP: 其中一个原因可能是你有一组声明的变量与你的SQL语句使用的集合不同。

E.g。这可能是一个错字,或者您可以从Visual Studio中复制用于使用参数(如:parm)填充数据集表的SQL,但这样做就忘了声明它(@parm )在你的存储过程或开始/结束块中。