• CurrentState - также значение перечисления ConnectionState - представляет новое состояние объекта sqlConnection, непосредственно после смены состояния.
Пример. Используя объект sqlConnection, создадим соединение и откроем его:
SqlConnection sqlConnectionl = new SqlConnection("..."); sqlConnection1.Open();
и затем, использовав где-либо, закроем:
sqlConnection1.Close();
Зададим следующий обработчик события смены состояния соединения:
private void sqlConnection1_StateChange(object sender,
System.Data.StateChangeEventArgs e) { MessageBox.Show("The current Connection state has changed from " + e.OriginalState + " to " + e.CurrentState);
}
При открытии соединения получим окно сообщения, показанное на рис. 2.10.

рис. 2.10
При закрытии соединения выдается окно сообщения, показанное на рис. 2.11.

рис. 2.11
2.1.10. Использование пула соединений
Соединение после своего закрытия в приложении не уничтожается, а попадает в пул - динамически разделяемую область памяти.
Когда то же или иное приложение снова открывает соединение с аналогичными параметрами (т. е. с такой же строкой соединения), то физически соединение с источником данных заново не устанавливается, а берется из пула.
Новое соединение создается, только когда свободных соединений с такими параметрами в пуле нет.
Когда взятое из пула соединение закрывается в приложении, оно вновь возвращается в пул.
Использование пулов позволяет обслуживать большее число пользователей в условиях ограниченного числа физических соединений с источником данных. Масштабируемость приложений при этом возрастает.
Провайдеры ADO.NET автоматически управляют обслуживанием пула. У каждого провайдера своя разновидность пула и различные возможности их конфигурирования пользователем. Конфигурирование производится при помощи параметров провайдера, задаваемых в строке соединения. Они рассматриваются ниже. Пользователю нет необходимости программно вмешиваться в процесс создания и обслуживания пула.
Для .NET-провайдера SQL Server пул создается для каждой разновидности строки соединений. При этом используется столь строгий алгоритм соответствия, что даже лишний пробел в идентичных строках соединения может привести к созданию нового пула.
Пример создания трех новых объектов SqlConnection, использующих два пула (строки первого и третьего соединения идентичны; они отличаются от строки третьего соединения атрибутом Initial Catalog). SqlConnection cn = new SqlConnection();
cn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=VUZ";
cn.Open();
// Создается пул A.
SqlConnection cn = new SqlConnection();
cn.ConnectionString = "Integrated Security=SSPI;Initial
Catalog=PAVLIK";
cn.Open();
// Создается пул B, поскольку строка соединения отличается от // первого.
SqlConnection cn = new SqlConnection();
cn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=VUZ"; cn.Open();
// Строка соединения аналогична первому соединению и оттого попадает // в пул A.
В результате отработки приведенного выше кода будет создано два физических соединения. Первое будет использоваться первым и третим объектом SqlConnection, второе - вторым объектом SqlConnection.