2010-01-26

C#でSQL実行の際、DataReaderの例外が発生してしまう

SqlConnectionを接続したまま使い回す際に、下記のような記述だと
「このコマンドに関連付けられている DataReader が既に開かれています。
このコマンドを最初に閉じる必要があります。」との例外が発生してしまう。

SqlCommand cmd = new SqlCommand();
cmd = conection.CreateCommand();
cmd.CommandText = cmdText;
cmd.ExecuteReader();
cmd.Dispose();

暗黙的にSqlDataReaderが使われ、それが閉じられていない模様。
Readerで何かする用途がなくても下記のように記載してあげると、
ちゃんと閉じられ、Connectionを使いまわす事が可能

SqlCommand cmd = new SqlCommand();
cmd = conection.CreateCommand();
cmd.CommandText = cmdText;
SqlDataReader reader = cmd.ExecuteReader(); <-- 必要なくてもReader作成
reader.Close(); <-- Readerを必ず閉じる
cmd.Dispose();

2 コメント:

Lefty さんのコメント...

ご存知かもしれませんが念のため。
そもそも、「Readerで何かする用途がない」場合は、
ExecuteReaderではなく、ExecuteNonQueryを使うほうがいいんじゃないかと思います。
これならCloseする必要もないわけで。

toconuts さんのコメント...

Leftyさん

コメントありがとうございます。
諸々の事情によりこの辺りの情報が
メンテできずにおります。

貴重な情報の提供、ありがとうございます。

コメントを投稿

 
Copyright 2010 toconuts. Powered by Blogger Blogger Templates create by Deluxe Templates. WP by Masterplan