2014-06-13 52 views
0

我正在使用帶有3個輸入參數和許多輸出參數的存儲過程使用Oracle.Data.Client庫調用Oracle數據庫。避免大量的代碼來處理Oracle查詢中的參數

我的代碼如下所示:

DataTable dt = new DataTable(); 
OracleConnection connection = new OracleConnection(connectionString); 
using (connection) 
{ 
    OracleDataAdapter da = new OracleDataAdapter(); 
    OracleCommand cmd = new OracleCommand(); 
    cmd.Connection = connection; 
    cmd.CommandText = "storedProcedureName"; 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.InitialLONGFetchSize = 1000; 
    cmd.Parameters.Add("@arg1", arg1); 
    cmd.Parameters.Add("@arg2", arg2); 
    cmd.Parameters.Add("@arg3", arg3); 
    da.SelectCommand = cmd; 
    da.Fill(dt); 
} 

當我執行這個代碼,甲骨文抱怨沒有足夠的論據。我已經確定,它希望我把爲每個輸出參數一些代碼,以及像這樣:

cmd.Parameters.Add("@out1", out1); 
cmd.Parameters["@out1"].Direction = ParameterDirection.Output; 

但是,這很難說是優雅的,尤其是當我與每一個輸出參數做到這一點(有很多)。有沒有辦法一次處理所有的輸出參數?理想情況下,我希望保持存儲過程相同,因爲它也用於其他項目。

回答

0

如果該過程有12個輸出參數,則需要將12個輸出參數綁定到您的語句。

現在,我認爲任何有12個輸出參數的程序至少是相當可疑的。這讓我想起了設計良好的API必須處理的太多參數。您試圖將結果放入表中的事實意味着您確實需要一個輸出sys_refcursor或某種其他複合數據結構的過程。

相關問題