0

ODP.NET(Microsoftのプロバイダーから移行)を使用していますが、リフレクターを返すストアドプロシージャでスタックしています。次のPL/SQLプロシージャがあります(より一般的なものにするために少し変更しました)。

PROCEDURE MyProc(parameter_no1 IN NUMBER, parameter_no2 IN NUMBER, RETCURSOR OUT ret_type) AS
BEGIN
  OPEN RETCURSOR FOR
  SELECT   ad.logo logo 
  FROM    tab_a a, tab_h h 
  WHERE  a.id IS NOT NULL 
  AND    a.h_id = h.id 
  AND    a.no1 = parameter_no1
  AND    a.no2= parameter_no2;
END HanteraLogotype;

そして、それを呼び出すための次のC#コードがあります。

internal void RefCursorDataReader()
{
  OracleCommand cmd = new OracleCommand("ABC$MYPACKAGE.MyProc", new OracleConnection(_constr));
  cmd.CommandType = CommandType.StoredProcedure;
  cmd.Connection.Open();
  cmd.BindByName = true;

  OracleParameter p = cmd.Parameters.Add("parameter_no1", OracleDbType.Decimal);
  p.Value = 12345678;
  p.Direction = ParameterDirection.Input;

  p = cmd.Parameters.Add("parameter_no2", OracleDbType.Decimal);
  p.Value = 123456;
  p.Direction = ParameterDirection.Input;

  p = cmd.Parameters.Add("RETCURSOR", OracleDbType.RefCursor);
  p.Direction = ParameterDirection.Output;

  OracleDataReader reader = cmd.ExecuteReader();

  if (reader.Read())
  {
    System.Diagnostics.Debug.WriteLine(reader[0].GetType().ToString());
  }

  cmd.Connection.Close();
}

そして、これを実行すると、次の例外が発生し続けます。

ORA-03106:致命的な2タスク通信プロトコル・エラー

私はパラメータ、それらのタイプ、順序などの多くの異なるバリエーションを試しましたが、何も役に立たないようです。reader.Read()例外をスローするのはそれです。私はこれについて本当に助けていただければ幸いです!

追加:ret_typeは次のように定義されます:

TYPEret_typeはREFCURSORです。

4

2 に答える 2

1

それはバグのように見えます。3106エラーは、決して発生しないはずの悪いエラーです。回避策があると確信しています!!

ODP.NETに関する質問をするのに最適な場所は、OTNODP.NETフォーラムです。もし私があなただったら、あそこに投稿します:

http://forums.oracle.com/forums/forum.jspa?forumID=146&start=0

また、その特定のフォーラムで「3106」を検索してください

于 2009-07-31T19:30:58.800 に答える
0

11G ODP.NET にアップグレードしました

于 2009-08-11T20:41:01.427 に答える