2011-09-25 59 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对象对应于池中的一个连接。期。