投稿者 MMTRS  (社会人) 投稿日時 2010/6/25 12:00:14
よねKENさんの言うとおり、

Call GetData1()     'Closeなし
Call GetData2()     'Closeあり

では100%例外が発生し、

Call GetData1()     'Closeなし 
GC.Collect() 
GC.WaitForPendingFinalizers()  ' Finalize≒Dispose≒Closeの処理完了を確実に待つため
Call GetData2()     'Closeあり

では例外が発生しませんでした。
(ガベージコレクターに関しては今回初めて知りました。)

ということは、SqlConnectionの重複使用による例外を回避するには

1.接続文字列のオプションでMARSを有効にする
2.SqlDataReaderの取得前にガベージコレクションを強制実行する

の2通りの方法で問題ないでしょうか。
もちろん、上記は本来作りたかったものとは異なる部分もあるでしょうし、
再度コードを見直して他にもSqlDataReaderのCloseが抜けている箇所がないか
確認するというのは前提として。