ADO.Net - 同时运行多个DBDataReaders?

时间:2011-09-25 02:52:47

标签: .net ado.net dbdatareader

当我同时有多个DBDataReaders读数据时,我收到以下错误:

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

我在配置中启用了ConnectionPooling,所以我不明白为什么会收到此错误。它是否假设创建一个新连接,因为我当前的连接已被使用?

我知道将MultipleActiveResultSets设置为true可以解决问题,但我仍然试图理解问题存在的原因

1 个答案:

答案 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对象对应于池中的一个连接。周期。