Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ADO как базовый объект доступа.doc
Скачиваний:
16
Добавлен:
15.12.2018
Размер:
1.48 Mб
Скачать

1.3.2. Открытие и закрытие соединения

Объекты Connection имеют два базовых метода для открытия и закрытия соединения (Open и Close). Метод Open использует информацию из свойства ConnectionString, чтобы обратиться к источнику данных и открыть (установить) связь. Метод Close закрывает открытое соединение. Закрытие связи приложения с базой данных является очень важным событием. В этот момент освобождаются ценные системные ресурсы, и база данных может обслуживать нового пользователя (количество обслуживаемых пользователей ограничено). Такая экономия особо актуальна для Интернет-приложений, где количество обслуживаемых клиентов может достигать нескольких сотен и тысяч.

Если вы используете объекты DataAdapter или DataCommand, то нет необходимости явно открывать и закрывать соединение. Когда вызываются методы этих объектов (например, Fill или Update), то автоматически делается проверка — открыто ли соединение. Если нет, DataAdapter сам откроет соединение, выполнит свои функции и снова закроет соединение. Методы, такие как Fill, открывают и закрывают соединение автоматически только в том случае, если оно не было открыто. Если при вызове подобных методов соединение уже открыто, то оно используется и не закрывается после отработки методов. Такая стратегия дает возможность разработчикам самостоятельно управлять состоянием соединения. Это требуется в тех случаях, когда несколько объектов DataAdapter используют один объект Connection. Тогда более эффективно принудительно открыть соединение и оставлять его открытым, пока не отработают методы всех объектов DataAdapter, после чего принудительно закрыть соединение.

1.3.3. Пул соединений

В Web-приложениях часто множество различных пользователей могут обращаться к одной и той же базе и запрашивать одни и те же данные. В этих случаях исполняемое приложение может создать пул соединений к источнику данных.

Примечание

Пул — объект или физическое устройство, обеспечивающее доступ множества клиентов к одному источнику данных или к другому физическому устройству. В результате пул, как один объект соединения, обслуживающий множество клиентов, занимает в памяти сервера значительно меньше места, чем если бы было создано отдельное соединение для каждого клиента.

Если используется класс OleDbConnection, то пул соединений формируется автоматически провайдером, так что разработчик освобождается от управления этим процессом. Если используется класс SqConnection, то создание пула соединений также обеспечивается, но программист имеет возможность вмешиваться в его управление.

1.3.4. Транзакции

Объекты Connection поддерживают транзакции с помощью метода BeginTransaction, который создает объект OleDbTransaction или SqlTransaction. Объекты Transaction в свою очередь поддерживают методы, которые позволяют вам завершить транзакцию (Commit) или сделать "откат" назад (Rollback).

1.3.5. Конфигурирование свойств Connection

Во многих приложениях содержимое объекта Connection не может быть однозначно определено на этапе разработки проекта. Например, в приложении, которое будет распространяться среди множества клиентов, в Connection не могут быть жестко прописаны такие параметры, как имя сервера, имя пользователя или пароль пользователя. У каждого потребителя программного продукта значения этих атрибутов будут свои. Следовательно, содержимое свойства ConnectionString должно формироваться динамически при запуске приложения. Поскольку динамические свойства соединения заносятся и хранятся в отдельном конфигурационном файле, который не компилируется, то они могут быть впоследствии изменены без перекомпиляции приложения. Динамические свойства автоматически получают значения из конфигурационного файла во время выполнения приложения. За работу этого механизма отвечает среда .NET Framework.

Сохранение элементов строки ConnectionString (таких как, например, имя сервера, имя пользователя и пароль) как динамических свойств может иметь смысл и для повышения безопасности вашего приложения.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]