私はこのコードを持っています:
// this is managed elsewhere
SqlConnection connection =...
connection.Open();
// this is one block of code, separate from the above
using( var transaction = connection.BeginTransaction() ) {
using( var command = connection.CreateCommand() ) {
command.Transaction = transaction;
command.CommandText = ...
using( var reader = command.ExecuteReader() ) {
if( reader.HasRows ) {
if( reader.Read() ) {
//get data from the reader
}
}
}
}
ほとんどの場合、このコードは問題なく動作します。ただし、ごくまれに、取得HasRows
すると次の例外が発生することがあります。
Invalid attempt to call HasRows when reader is closed.
System.InvalidOperationException
at System.Data.SqlClient.SqlDataReader.get_HasRows()
// my code calling HasRows listed here
その瞬間に接続が開いていることを 99.5% 確信しています。私のコードは、 MSDN が示唆するようHasRows
に、リーダーから読み取る前に使用します。
その例外の理由は何でしょうか?