投稿者 るきお  (社会人) 投稿日時 2009/2/27 21:20:59
提示されたコードだけからははっきりとはいえませんが、
恐らくDataReaderを開いた状態で、同じ接続を使ってExecuteNonQueryを実行しているのが原因と思います。

DataReaderは接続を占有しますので、DataReaderを開いているときにその接続を使ってExecuteNonQueryなどの別処理を行うことはできません。

回避策としてこの「接続」とはSqlConnectionクラスのことですので、同じデータベースに対して2つのSqlConnectionを作成すれば片方ではDataReaderを実行し、他方ではExecuteNonQueryを発行することが可能になります。
これはプログラム的には大して難しくはないのですが、トランザクションの排他制御などデータベースの読み書きに関する通常の同時実行制御について気をつけることが増えてしまうので、ある程度重要な業務で使用する場合は十分に設計・テストを行ってください。

もう1つの回避策としてはDataReaderを使うのを止めるということが考えられます。
たとえば、代わりにDataTableを使用することはできませんか?