- 題名: 接続プールについて
- 日時: 2011/03/31 11:50:45
- ID: 28369
- この記事の返信元:
- (なし)
- この記事への返信:
- [28371] Re[1]: 接続プールについて2011/03/31 12:42:10
- [28385] Re[1]: 接続プールについて2011/03/31 23:02:03
- ツリーを表示
2011/04/01(Fri) 00:26:08 編集(投稿者) ■No28369に返信(かこさんの記事) ADODB.Connection オブジェクトのリソースが関係していないですかね。 .NET Framework で ADODB を使う場合には、Nothing を代入する前に Marshal.Relea seComObject を呼び明示的に参照カウントを減らす必要があります。こんな感じにし てみてはいかがでしょうか。 Try con = New ADODB.Connection() Try con.Open() ... Finally con.Close() End Try Finally If Not (con Is Nothing) Then Marshal.ReleaseComObject(con) con = Nothing End If End Try
2011/04/02(Sat) 03:59:54 編集(投稿者) ■No28389に返信(かこさんの記事) > Marshal.ReleaseComObjectメソッドは、指定したオブジェクトに関連する参照 > (この場合なら接続プール)も開放するという認識で良いのでしょうか? ADODB.Connection オブジェクトが、排他エラーを引き起こすリソースを保持してい て、Marshal.ReleaseComObject を呼んだことで ADODB.Connection オブジェクトの 参照カウントが0になって、ADODB.Connection オブジェクトのデストラクタが呼ばれ たことで、排他エラーを引き起こすリソースが開放されたということなんでしょうけ れども、排他エラーを引き起こすリソースが接続プールなのかどうかはわたしにはわ かりません。なので Marshal.ReleaseComObject で接続プールが開放されるのかはわ かりません。 接続プールというのは OLE DB や ODBC といったプロバイダーによっても変わってく るのですかね。接続プールの状態を確認するすべをなにかご存知ではないですか?と 逆に質問してみたり。
分類:[.NET]
初めて質問させていただきます。
検索したのですが回答が得られなかったため、質問させていただきます。
初心者故分かりにくい表現や的外れなことを書いている可能性がありますが、
どうぞ宜しくお願いいたします。
現在、VB.NETでSQLServerにリストアするプログラムを作成しています。
コードは以下のような感じです。
##################################################################
Public con As ADODB.Connection
:
<略>
:
con.Open(接続文字列)
:
con.Close() '(1)
con = Nothing
:
<略>
:
Shell(リストアsqlcmd) '(2)
##################################################################
(2)でリストアを実行すようとすると、排他エラーとなってしまいます。
接続プールが削除されるまでに少々時間がかかっているようです。
ADOの場合、接続プールを削除するにはどのようにしたらいいのでしょうか?
もしかしたら、他に原因があるのでしょうか?
お手すきの際にご回答いただければ幸いです。
どうぞ宜しくお願いいたします。