当我同时有多个DBDataReaders
读数据时,我收到以下错误:
There is already an open DataReader associated with this Connection which must be
closed first
我在配置中启用了ConnectionPooling,所以我不明白为什么会收到此错误。它是否假设创建一个新连接,因为我当前的连接已被使用?
我知道将MultipleActiveResultSets
设置为true可以解决问题,但我仍然试图理解问题存在的原因
答案 0 :(得分: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
对象对应于池中的一个连接。周期。