0
既然我有這個Oracle存儲過程(這是一個測試例子)存儲過程/ SYS_REFCURSOR - 錯誤的參數數目
PROCEDURE dave IS
dave_data SYS_REFCURSOR;
v_col1 NUMBER;
v_col2 VARCHAr2(100);
BEGIN
DBMS_OUTPUT.ENABLE(2000000);
dave_truck_ticket.get_report_data(dave_data,1234,'01-JUL-13','15-Jul-13');
LOOP
FETCH dave_data INTO v_col1, v_col2;
EXIT WHEN dave_data%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(v_col1||' - '||v_col2);
END LOOP;
CLOSE dave_data;
END;
而且是錯誤只可能是在存儲過程中 - 因爲我從來不觸摸甲骨文之前..
我試圖讀取從以這種方式將光標(dave_data)數據:
O.OracleConnection objConn = new O.OracleConnection("DATA SOURCE=XXXDEV.WORLD;USER ID=XXXXXX;PASSWORD=XXXXXX;");
O.OracleCommand objCmd = new O.OracleCommand();
objCmd.Connection = objConn;
objCmd.CommandText = "DAVE";
objCmd.CommandType = System.Data.CommandType.StoredProcedure;
O.OracleParameter cursor = new O.OracleParameter("dave_data", O.OracleDbType.RefCursor);
cursor.Direction = System.Data.ParameterDirection.Output;
objCmd.Parameters.Add(cursor);
try
{
objConn.Open();
O.OracleDataReader objReader = objCmd.ExecuteReader();
objReader.Read();
objReader[0].ToString();
我O.參考被指定爲:使用了O = Oracle.DataAccess.Client; (4.112.3.0版)
我收到(後直接的ExecuteReader())是錯誤:
什麼是更令人氣憤的是,我可以從服務器資源管理器執行的例子 - 和它的作品只是精細!
請善待並指出在那裏我是一個打頭....
你的過程搞砸了。您需要將參考光標作爲proc的參數,並將其打開。無需做任何循環/取指。這就是你的客戶代碼將會做的事情。這裏是一個鏈接(沒有C#壽) - http://www.oracle-base.com/articles/misc/using-ref-cursors-to-return-recordsets.php – OldProgrammer
你爲什麼不直接調用'get_report_data' ?包裝程序的要點是什麼? –