鉴于我有这个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.参考指定为: 使用O = Oracle.DataAccess.Client; (版本4.112.3.0)
我收到的错误(直接在ExecuteReader()之后)是:
更令人愤怒的是,我可以从服务器资源管理器中执行该示例 - 它运行得很好!
请善待并指出我在哪里......
答案 0 :(得分:0)
问题在于Oracle过程,而不是C#代码。我收到了另一位开发人员的Oracle程序,我们将电线交叉。一旦用参考光标创建了OUT参数,它就可以正常工作。给OldProgrammer +1 - 你应该把你的评论作为答案!