2010-11-08 19 views
0

我在.Net中使用ODBC命令對象構建查詢,並傳入多個參數。對SQL Anywhere執行查詢時,出現以下錯誤。 (相同的代碼適用於SQL Server)。SQL Anywhere查詢錯誤:主機變量的值不足

[System.Data.Odbc.OdbcException] = { 「ERROR [07002] [的Sybase] [ODBC驅動程序] [SQL Anywhere的用於主機變量的值不夠」}

該命令對象具有相同數量的作爲佔位符('?')添加到查詢中的參數。以下是一個簡單的查詢和未通過測試的C#代碼。

C#代碼來填充主機變量

字符串QUERYTEXT = @「DECLARE @loanuseraddress VARCHAR(40),@loanid小數 設置@loanid =? 設置@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(); 

回答

3

我通過檢查空值來解決這個問題。當您嘗試將空參數傳遞給Sybase時,這是您得到的錯誤(至少對我而言)。有一種感覺LoanId在某些時候是空的。

編輯在做了一些更多的研究後,我認爲當您通過.Net中的Sybase ODBC連接嘗試多次插入/刪除/更新時,也可能會出現此錯誤。我不認爲這是支持的,MSDN似乎說它是供應商特定的。

+0

謝謝,那是我的問題:) – Carra 2011-04-26 09:22:22

1

「沒有足夠的主機變量」也意味着別的東西,但它適用於OP:的其他原因 一個可能是,你有一組從SQL語句使用一套不同的聲明變量。

E.g.這可能是一個拼寫錯誤,或者你可能已經從Visual Studio中複製了用於使用參數(例如:parm)填充數據集表的SQL,但這樣做卻忘了在存儲過程中聲明它(或作爲@parm),或者開始/結束塊。