ADO.NET での DataReader の入れ子エラー

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での実行


富士通パソコンFMVの直販サイト富士通 WEB MART


楽天市場
コメント(0)