1

我正在使用 .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 Set @loanid = ? Set @loanuseraddress = ? select * from loan_assignments where 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();
4

2 回答 2

5

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

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

于 2010-12-09T16:29:56.400 回答
2

“主机变量不足”也可能意味着其他东西,但它适用于 OP:其他原因之一可能是您有一组声明的变量与您的 SQL 语句使用的变量集不同。

例如,这可能是一个错字,或者您可能已经从 Visual Studio 中复制了 SQL,该 SQL 用于使用参数(如:parm)填充数据集表,但这样做时您忘记@parm在存储的过程或开始/结束中声明它(如)堵塞。

于 2013-09-07T04:02:27.453 回答