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