鉴于我有这个 Oracle 存储过程(这是一个测试示例)
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;
是的,错误可能出在存储过程中——因为我以前从未接触过 Oracle。
我正在尝试以这种方式从游标(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. 参考被指定为: using O = Oracle.DataAccess.Client; (版本 4.112.3.0)
我收到的错误(直接在 ExecuteReader() 之后)是:
更令人气愤的是,我可以从服务器资源管理器中执行示例——而且效果很好!
请善待并指出我在哪里是一个贵族......