2015-10-20 44 views
0

我在等待下面的代碼運行但是會拋出無法強制類型爲'System.String'的對象類型爲'Oracle.ManagedDataAccess.Client.OracleParameter'從c#調用oracle存儲過程而不知道sp參數名

var conn = new OracleConnection(ORACLE_CONN_STR); 
conn.Open(); 
OracleCommand cmd = new OracleCommand("procName", conn); 
cmd.Parameters.Add("aParamValue"); 
cmd.ExecuteNonQuery(); 

爲什麼會出現這樣的過載如OracleParameterCollection.Add(對象),如果我要僅傳遞的OracleParameter?

回答

0

提供這種重載的原因是允許您以相對更簡單的格式添加參數詳細信息,並且OracleParameter啓動是在內部完成的,但您提供的信息類型可能還存在問題根據需要進行內部轉換。

您可以檢查以下link,因爲它做了類似的工作。你必須確保要求的格式是正確的並且是按人工

此外,在甲骨文,我覺得參數名稱由":"符號開頭,所以你可能必須嘗試:

cmd.Parameters.Add(":aParamValue"); 

假設您提供參數名稱,正如它在代碼中所描繪的那樣,不僅僅是直接提供值,當前API集無法自動理解這些值以在內部創建OracleParameter

0

我認爲OracleParameterCollection.Add(object)過載是爲了提供參數值不帶名稱。正確的做法是

cmd.Parameters.Add("", OracleDbType.Char).Value = "aParamValue";