ADO.Net - Наличие нескольких одновременно работающих DBDataReader? - PullRequest
0 голосов
/ 25 сентября 2011

Когда у меня несколько DBDataReaders читающих данные одновременно, я получаю следующую ошибку:

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

В моей конфигурации включен ConnectionPooling, поэтому я не понимаю, почему я получаю эту ошибку,Разве это не предполагает создание нового соединения, так как мое текущее соединение уже используется?

Я знаю, что установка MultipleActiveResultSets в значение true решит проблему, но я все еще пытаюсь понять, почему проблемаесть

1 Ответ

1 голос
/ 25 сентября 2011

Пул соединений не делает то, что вы думаете.

Если вы делаете что-то подобное

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 объект соответствует одному соединению из пула. Период.

...