存储过程/ SYS_RefCursor - 参数数量错误

时间:2013-07-18 02:37:54

标签: oracle c#-4.0

鉴于我有这个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()之后)是: Oracle error

更令人愤怒的是,我可以从服务器资源管理器中执行该示例 - 它运行得很好!

请善待并指出我在哪里......

1 个答案:

答案 0 :(得分:0)

问题在于Oracle过程,而不是C#代码。我收到了另一位开发人员的Oracle程序,我们将电线交叉。一旦用参考光标创建了OUT参数,它就可以正常工作。给OldProgrammer +1 - 你应该把你的评论作为答案!