ADO.NETを利用してSQL-Serverをアクセスするプログラムを組む場合に、データ参照のために DataReader を使用します。
一連のデータ処理では DataReader からのデータ取得をループで処理しますが、そのループ内で更にマスタ等のデータを 参照したくなることはよくあります。
この場合、同じコネクションを使いたくなり DataReader の処理中に更に DataReader を入れ子で使うことになったのですが 以下のエラーが発生しました。
System.InvalidOperationException: このコマンドに関連付けられている DataReader が既に開かれています。このコマンドを最初に閉じる必要があります。
この DataReader を入れ子で使えないかと調べたら、接続文字列の中に以下の指定を行えばできることがわかりました。
MultipleActiveResultSets=True
以前、このブログの中で 「ADO.NET を使用した SQL-Server へのアクセス・クラス」を載せていますが、接続文字列は以下の様な感じがいいと思います。
Persist Security Info=false;Integrated Security=SSPI;MultipleActiveResultSets=True;Initial Catalog=[DataBase-Name];Data Source=[DataSource-Name];
■関連記事
⇒VB.NET:ADO.NETを使用したSQL-ServerのテーブルのCSV出力
⇒BCPコマンドでUnicode文字形式を使用したデータのインポート及びエクスポート(SQL Server)について
⇒ADO.NET を使用した SQL-Server へのアクセス・クラス
⇒SQL-Serverの自動採番(IDENTITY値)の取得・リセット
⇒SQL-Serverのストアド・ファンクションではUPDATEなどが実行できない
⇒SQL-Serverのユーティリティ(BCPコマンド)を利用したテーブルへのインポート・エキスポート
⇒SQL-Serverのプロシージャ生成のバッチ実行
⇒SQL-Serverの関数・プロシージャのVB.NETでの実行