- •1.4. Адаптер данных (объект DataAdapter) 13
- •1. Ado.Net как базовый объект доступа к базам данных
- •1.1. Структура компонента доступа к данным ado.Net
- •1.1.1. Работа в отрыве от источника данных
- •1.1.2. Взаимодействие с базой данных через команды
- •1.1.3. Взаимодействие с базой данных через объект DataSet
- •1.1.4. Независимость набора данных DataSet от источника данных
- •1.1.5. Обмен данными в формате xml
- •1.1.6. Схемы, определяющие структуру данных
- •1.2. Сравнение ado.Net и ado
- •1.2.1. Представление данных в памяти
- •1.2.2. Навигация по данным и курсоры
- •1.2.3. Минимизация открытых соединений
- •1.2.4. Разделение данных между приложениями
- •1.3. Соединение с источником данных (объект Connection)
- •1.3.1. Строка соединения
- •1.3.2. Открытие и закрытие соединения
- •1.3.3. Пул соединений
- •1.3.4. Транзакции
- •1.3.5. Конфигурирование свойств Connection
- •1.3.6. Объект Connection и безопасность
- •1.3.7. Создание объекта Connection в режиме дизайнера с помощью Server Explorer
- •1.3.8. Инструменты Visual Studio для создания объектов Connection
- •1.3.9. Создание объекта Connection в ado.Net
- •1.4. Адаптер данных (объект DataAdapter)
- •1.4.1. Адаптеры данных и связанные таблицы
- •1.4.2. Адаптеры данных и объекты Command
- •1.4.3. Чтение и обновление данных с использованием объекта DataAdapter
- •1.4.4. Параметры команд объекта DataAdapter
- •1.4.5. Свойство TableMappings объекта DataAdapter
- •1.4.6. Создание объекта DataAdapter
- •1.4.7. Конфигурирование параметров объекта DataAdapter
- •1.4.8. Связывание колонок таблиц источника данных и объекта DataSet через адаптер данных
- •1.4.9. Предварительный просмотр данных, полученных объектом DataAdapter
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 (таких как, например, имя сервера, имя пользователя и пароль) как динамических свойств может иметь смысл и для повышения безопасности вашего приложения.