C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 90 を表示中)
■53493 / )  Re[7]: OracleClient接続のあとにODP接続でエラー発生
□投稿者/ たか (87回)-(2010/09/15(Wed) 10:51:30)
お付き合いくださり、ありがとうございます。

> 以下のコードでもエラーが発生するんでしょうか?
> using (var conn = new System.Data.OracleClient.OracleConnection())
> {
> //conn.ConnectionString = "Data Source=TESTDB;User ID=sa;Password=pass";
> //conn.Open();
> }
> using (var conn = new Oracle.DataAccess.Client.OracleConnection())
> {
> }
上記ケースは、さすがに発生しませんでした。

> それとも再現条件にはOpenやTransactionも必要なんでしょうか?
このusingの間に↓をいれると同じエラーが発生します。
conn.ConnectionString = "Data Source=xxx;User ID=ユーザーID;Password=パス";
conn.Open();
conn.Close();

Openが再現条件です。

> (エラーは同様と書かれましたが、TypeInitializationExceptionですか?)
はい。TypeInitializationExceptionです。まったく同じエラーです。

> ただし、普通は2つのプロバイダを使う必要性はないと思うので、どうしてそうされているのかも興味があります。
Windowsツールを作っていまして、すきなプロバイダーを設定画面で設定してDBアクセスするツールになります。
なので、1度の実行(exeを実行して終了するまで)の中で、複数プロバイダーを使用するケースが生まれています。
(たしかに通常、発生しないケースです)

> もしかして、プロバイダが異なるEXEを続けて実行した場合にもエラーが発生したりするんでしょうか?
この場合は、発生しません。
なので、.net標準ライブラリでopenした後の、後片付けがきちんどできていないためのエラーのように見えます。

> だめもとですが、2つめのusingの前でGC.Collect()を実行しても変わらないでしょうか?
試したところ、変わりませんでした。同じエラーです。

> Open不要な場合は関係ないですが、1つめの接続でPoolingを無効にしても同じでしょうか?
以下のようにしましたが、やはり同じエラーが発生しました。
conn.ConnectionString = "Data Source=xxx;Pooling=false;User ID=ユーザーID;Password=パス";


返信 編集キー/


管理者用

- Child Tree -