ADO.Net - Наличие нескольких одновременно работающих DBDataReader?

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

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

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

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

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

Другие вопросы по тегам