我有這樣的代碼:爲什麼打開連接時會出現「無法嘗試在閱讀器關閉時調用HasRows」?
// 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%,確保連接在那一刻開啓。在從讀者pretty much like MSDN suggests讀取之前,我的代碼使用HasRows
。
什麼可能是該例外的原因?
它是什麼類型的應用程序(f.e。ASP.NET),其中是初始化和聲明的連接,是靜態的,啓用了「Connection-Pooling」,你爲什麼重用它?我會在使用它的'using-statement'中創建它。 –
你在那時檢查了連接的狀態是什麼? http://msdn.microsoft.com/en-us/library/system.data.connectionstate.aspx –
@astander:不,否則我不會說我99.5%肯定。 – sharptooth