0

When I have multiple DBDataReaders reading data at the same time I get the following error:

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

I have ConnectionPooling enabled in my config so I don't understand why I am getting this error. Doesn't it suppose to create a new connection since my current connection is already in use?

I know that setting MultipleActiveResultSets to true would fix the problem, but I'm still trying to understand why the problem exist

aryaxt
  • 76,198
  • 92
  • 293
  • 442

1 Answers1

1

Connection pooling does not do what you think it does.

If you do something like this

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();

then all of this will happen on one connection, whether or not you have connection pooling.

Connection pooling just keeps a cache of connections that you can draw from every time that you create a new connection (new SqlConnection) and open it (SqlConnectinon.Open). When you close a connection, it returns to the pool to be reused. But one open SqlConnection object corresponds to one connection from the pool. Period.

jason
  • 236,483
  • 35
  • 423
  • 525