Ошибка запроса SQL в любом месте: недостаточно значений для переменных хоста - PullRequest
1 голос
/ 08 ноября 2010

Я строю запрос с использованием объекта команды ODBC в .Net с несколькими передаваемыми параметрами. При выполнении запроса к 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 где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 ]

4 голосов
/ 09 декабря 2010

Я исправил это, проверив нулевые значения.Когда вы пытаетесь передать пустой параметр в Sybase, вы получаете эту ошибку (по крайней мере, для меня).У вас есть ощущение, что LoanId в какой-то момент не имеет значения.

Редактировать Пройдя немного больше исследований, я думаю, вы также можете получить эту ошибку, если попытаетесь несколько раз вставить / удалить / обновить через SybaseODBC соединение в .Net.Я не думаю, что это поддерживается, и MSDN, кажется, говорит, что это зависит от поставщика.

2 голосов
/ 07 сентября 2013

«Недостаточные переменные хоста» также может означать что-то еще, но это применимо к OP: одна из других причин может заключаться в том, что у вас есть набор объявленных переменных, отличный от набора, который используется вашим оператором SQL.

например. это может быть опечатка, или вы могли скопировать в SQL из Visual Studio, которая использовалась для заполнения таблицы набора данных с использованием параметров (например, :parm), но при этом вы забыли объявить ее (как @parm) в своем хранимом блок proc или begin / end.

...