1

Oracle.DataAccess.Client データ プロバイダー クライアントを使用しています。OracleException オブジェクトの新しいインスタンスを作成する際に問題が発生していますが、パブリック コンストラクターが存在しないというメッセージが表示され続けます。他の人が同じ問題を抱えているのを見て、解決策を試しましたが、うまくいかないようです。ここに私のテストコードがあります:

object[] args = { 1, "Test Message" };
ConstructorInfo ci = typeof(OracleException).GetConstructor(BindingFlags.NonPublic 
     | BindingFlags.Instance, null, System.Type.GetTypeArray(args), null);
var e = (OracleException)ci.Invoke(args);

テスト コードをデバッグするとき、'ci' の値が常に NULL になります。

Oracle はこれを許可しないようにライブラリを変更しましたか? NMock で使用する OracleException オブジェクトをインスタンス化するために何をする必要がありますか?

ちなみに、バージョン 10g のクライアント ライブラリを使用しています。

ありがとう、

チャーリー

4

1 に答える 1

0

ODP.NET の OracleException は、Microsoft クライアントの OracleException と同じではありません。OracleException には、GetConstructors() で取得できる 5 つのコンストラクター情報があります。

得られたコンストラクターのリストには、パラメーター (int、string) を持つコンストラクターがないことがわかります。そのため、ci で NULL を取得します。

パラメータの適切なリストを指定すると、適切な ConstructorInfo が得られ、Invoke(param); によってコンストラクタを呼び出すことができます。

ただし、このように呼び出されるように設計されていない OracleException コンストラクター - すべてのフィールドに適切な情報が含まれているわけではありません。

2すべて: 次の OracleException が必要です: ORA-00001 一意の制約 (string.string) に違反しました ORA-03113 通信チャネルのファイルの終わり ORA-03135: 接続が失われました ORA-12170: TNS: テストのために接続タイムアウトが発生しました。それらを作成するにはどうすればよいですか?

于 2016-08-31T09:15:19.670 に答える