2011-09-25 55 views
0

當我在同一時間,我得到了下面的錯誤有多個DBDataReaders讀取數據:ADO.Net - 讓多個DBDataReader同時運行?

There is already an open DataReader associated with this Connection which must be 
closed first 

我有我的配置能ConnectionPooling所以我不明白爲什麼我收到此錯誤。它不是因爲我的當前連接已被使用而創建新的連接嗎?

我知道,設置MultipleActiveResultSets爲true,將解決這個問題,但我還是想知道,爲什麼這個問題存在

回答

1

連接池並沒有做什麼,你認爲它。

如果你做這樣的事情

var connection = new SqlConnection(connectionString); 
connection.Open(); 
var command = connection.CreateCommand(); 
command.CommandText = // some query 
var reader = command.ExecuteReader(); 
var anotherCommand = connection.CreateCommand(); 
anotherCommand.CommandText = // another query 
var anotherReader = anotherCommand.ExecuteReader(); 

那麼這一切都將發生在一個連接,你是否擁有連接池。

連接池只保留一個連接緩存,您可以在每次創建新連接(new SqlConnection)並打開它(SqlConnectinon.Open)時繪製連接。當你關閉一個連接時,它會返回到池中被重用。但是一個開放的SqlConnection對象對應於池中的一個連接。期。