投稿者 acwg  (社会人) 投稿日時 2012/6/14 19:21:26
お世話になります。
今、VB2010 + SQL Server2008 R2 Express にて開発しているのですが、根本的な部分で確認させて
頂きたく、投稿させて頂きます。

今までVB6で開発してまして、今回がVB2010はお初なのですが、今までのプログラムの作りは、

1.プログラム起動時にDBへ接続(ADOです。)
2.各プログラムの処理では、Connectionは、使い回しで、RecordSetをオープンや、Excute
3.プログラムを終了する時に、接続解除

とやっていたので、
今回VB2010で作る際も、その流れで

1.プログラム起動時にDBへ接続(SqlClient使用)
2.各処理で、SqlCommandやSqlDataReaderを使用
3.プログラムを終了する時に、接続解除

としたのですが、SqlDataReaderを開いている最中に、サブルーチンをコールして、そのサブルーチン
の中で、SqlCommandを使用(ExecuteScalar())したら、

例外
この Command に関連付けられている DataReader が既に開かれています。このコマンドを最初に閉じる必要があります。

が出まして、いろいろネットで調べた所、1接続で同時に複数のSqlCommand、SqlDataReaderは開けないとの記事を見かけました。

ちなみに、自分のプログラムは、ConnectionのみPublicで、SqlCommandやSqlDataReaderは、各処理のローカル宣言なのですが、動きを見る限り、この複数使用NG制限にかかっているように見えます。

前置きが長くなりましたが、VB2010のSqlClientを使用したコーディングの場合、都度

1.DBに接続
2.SqlCommandやSqlDataReaderを開く
3.2で開いたものを閉じる
3.DB接続の解除

と、DBアクセスごとに、DBの接続~解除をするのがセオリーなのでしょうか?

みなさま、ご教授の程、宜しくお願い致します。