Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.AccessViolationException
Stack:
at Oracle.DataAccess.Client.OracleParameter.SetStatus(Int32)
at Oracle.DataAccess.Client.OracleParameter.PreBind(Oracle.DataAccess.Client.OracleConnection, IntPtr, Int32, Boolean)
at Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery()
アプリケーションがこの例外でクラッシュします。context is: 2 つのパラメーターを受け入れるストアド プロシージャを実行しようとしています。コマンド テキストのパラメーターに名前バインディングを使用しています。
例:
OraCommand.CommandText = "begin LOAD_UTILS.TRUNCATE_TABLE(:a1,:a2); end;"
OraCommand.Parameters.Add(New OracleParameter("a1", OracleDbType.Varchar2, 1000))
OraCommand.Parameters(0).Direction = ParameterDirection.Input
OraCommand.Parameters(0).Value = params(2)
OraCommand.Parameters.Add(New OracleParameter("a2", OracleDbType.Varchar2, 1000))
OraCommand.Parameters(1).Direction = ParameterDirection.Input
OraCommand.Parameters(1).Value = params(3)
私が観察した奇妙な点は、エラーが発生した場合に備えて、特定の回数の再試行のためにこれらのステートメントを for ループで実行することです。OraCommand はインスタンス変数であるため、パラメーター コレクションはクリアされません。
反復 1 では、パラメータ a1、a2 が追加され
ます 反復 2 では、最初の 2 つのパラメータがすでに存在し、ここでも a1 と a2 という名前のパラメータを追加しています。...
すべての反復の開始時にパラメーター コレクションをクリアすると、問題が発生しませんが、ここで問題を引き起こしている理論を思い付くことができません。何か考えはありますか?