当我同时有多个DBDataReaders
读取数据时,我得到以下错误:
There is already an open DataReader associated with this Connection which must be
closed first
我在我的配置中启用了ConnectionPooling,所以我不明白为什么我得到这个错误。既然我当前的连接已经在使用,它不应该创建一个新的连接吗?
我知道设置MultipleActiveResultSets
为true会解决问题,但我仍然试图理解为什么问题存在
连接池并不像你想象的那样。
如果你这样做
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
对象对应于池中的一个连接。时期。