2011-12-13 39 views
2

我有一個Informix數據庫,它公開了一些存儲過程,我有一個抽象數據訪問器來處理與他們的通信,但是我有一個空值的問題。通過ADO.Net命令調用Informix存儲過程的最佳/正確方法?

直接可以打電話:

execute procedure some_stored_procedure(1,2,NULL,3) 

,回到正確的結果,我寧願有沒有這個可空場,但它是從我手中。反正我本來試圖調用它像這樣:

var command = connection.CreateCommand(); 
command.CommandType = CommandTypes.StoredProcedure 
command.CommandText = "some_stored_procedure" 
// Pass in the parameters 

然而這樣做導致的Informix拋出一個語法錯誤,所以不是我不得不去的:

var command = connection.CreateCommand(); 
command.CommandText = "execute procedure some_stored_procedure(?,?,?,?)"; 
// Pass in parameters 

哪些工作,但永遠不會傳回正確的結果,如果我嘗試使參數3爲空,則會產生另一個語法錯誤。我是否錯過了一些東西,或者有沒有更好的方法來調用這些存儲過程?

回答

1

嘗試參數化參數(如果使用odbcdriver,則可以使用OdbcParameters),然後通過DbNull.Value(其中需要Null)。

試試這個:

var command = connection.CreateCommand(); 
command.CommandType = CommandTypes.Text; 
command.CommandText = "call some_stored_procedure(?,?,?,?)"; 

command.Parameters.Add(param); //add all your parameters. 
+0

已嘗試,它仍然似乎給一個語法錯誤:( – Grofit

0

格式的查詢如下:

 strQuery = string.Format("EXECUTE PROCEDURE Cronos_UpdateStateLegacyProduct ({0})", oValidityProducts.PurchaseId); 

     OdbcConnection oConnection = new OdbcConnection(this.strConnectionString); 
     OdbcCommand oCommand = new OdbcCommand(); 
     oCommand.CommandType = CommandType.StoredProcedure; 
     oCommand.CommandText = strQuery; 
     oCommand.Connection = oConnection; 

     oConnection.Open(); 

     intResult = oCommand.ExecuteNonQuery(); 

問候

-1

如果你正在使用ODBC連接,使用CommandType.StoredProcedure必須使用diferent時過程名稱的語法。你的情況:

CommandText = "{ CALL some_stored_procedure(?,?,?,?)}" 

檢查此鏈接瞭解更多信息:https://support.microsoft.com/en-us/kb/310130

相關問題