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. リファレンスは次のように指定されています。 using O = Oracle.DataAccess.Client; (バージョン 4.112.3.0)

私が受け取るエラー(ExecuteReader()の直後)は次のとおりです。 オラクルエラー

さらに腹立たしいのは、サーバー エクスプローラーから例を実行できることです。

親切にして、私がノブになっているところを指摘してください....

4

1 に答える 1

0

問題は Oracle プロシージャにあり、C# コードにはありません。私は別の開発者から Oracle の手順を受け取り、ワイヤーが交差しました。参照カーソルを使用して OUT パラメータを作成すると、問題なく動作しました。+1 に OldProgrammer - あなたのコメントを答えにするべきでした!

于 2013-08-02T15:57:49.097 に答える