Підключення до бази даних
Перше, що потрібно зробити при роботі з постачальником даних - це встановити сеанс з джерелом даних за допомогою об'єкта підключення (породженого, як ви пам'ятаєте, від DbConnection). У об'єктів підключення .NET є Форматована рядок підключення, яка містить ряд пар ім'я / значення, між якими ставлять крапку з комою. Ця інформація містить ім'я машини, до якої потрібно підключитися, необхідні параметри безпеки, ім'я бази даних на цій машині і іншу корисну інформацію постачальника.
У наступному коді ілюструється створення, відкриття і закриття з'єднання з базою даних SqlServer:
Крім того, можна вказати будь-яку кількість елементів, які задають повноваження безпеки. У нашому прикладі імені Integrated Security присвоєно значення SSPI (що еквівалентно true), яке використовує для аутентифікації користувача поточні повноваження облікового запису Windows.
Призначення кожної пари ім'я / значення для вашої СУБД можна дізнатися в документації по NET Framework 4.0 SDK, в описі властивості ConnectionString об'єкта підключення для вашого постачальника даних.
При наявності рядка підключення виклик Open () встановлює з'єднання з СУБД. На додаток до членів ConnectionString, Open () і Close () об'єкт підключення містить ряд членів, які дозволяють налаштувати додаткові параметри підключення, наприклад, час тайм-ауту і інформацію, що відноситься до транзакцій.
Нижче наведені деякі члени базового класу DbConnection:
Використовується для початку транзакції бази даних
Змінює базу даних для відкритого підключення
Властивість тільки для читання. Повертає час очікування при установці підключення, після якого очікування припиняється і видається повідомлення про помилку (за замовчуванням 15 секунд). Щоб змінити цю часу потрібно змінити в рядку підключення сегмент Connect Timeout (наприклад, Connect Timeout = 30)
Властивість тільки для читання. Містить ім'я бази даних, з якою пов'язаний об'єкт підключення
Властивість тільки для читання. Містить розташування бази даних, з якою пов'язаний об'єкт підключення
Цей метод повертає об'єкт DataTable, що містить інформацію схеми з джерела даних
Властивість тільки для читання. Містить поточний стан підключення у вигляді одного з значень перерахування ConnectionState
Властивості типу DbConnection призначені в основному тільки для читання і тому потрібні, якщо потрібно отримати характеристики підключення під час виконання. Якщо знадобиться змінити стандартні значення, необхідно буде змінити саму рядок підключення. Наприклад, можна змінити час тайм-ауту з 15 на 30 секунд:
Програмна робота з рядками підключення може виявитися кілька скрутної, оскільки вони часто представлені у вигляді строкових літералів, які важко обробляти і контролювати на наявність помилок. Постачальники даних ADO.NET, розроблені Microsoft, підтримують об'єкти построителей рядків підключення (connection string builder object) (аналог StringBuilder), які дозволяють встановлювати пари ім'я / значення за допомогою строго типізованих властивостей. Розглянемо наступну модифікацію нашого методу Main ():
У цьому варіанті створюється екземпляр SqlConnectionStringBuilder, встановлюються його властивості, і вибирається внутрішня рядок з властивості ConnectionString. Тут використано стандартний конструктор типу. При цьому можна також створити екземпляр об'єкта будівника для рядка підключення постачальника даних, передавши в якості відправної точки існуючий рядок підключення (це може виявитися зручним при динамічному читанні значень з файлу App.config).
Ефективне використання з'єднань
У загальному випадку при використанні в .NET таких мізерних ресурсів, як з'єднання з базою даних, вікна або графічні об'єкти, хорошим тоном є закриття ресурсу після роботи з ним. Хоча проектувальники .NET реалізували автоматичну збірку сміття, яка рано чи пізно станеться, необхідно звільняти ресурси якомога раніше, щоб уникнути дефіциту ресурсів.
Це також стосується і написання коду, що звертається до бази даних, тому що збереження підключень відкритими довше, ніж потрібно, може вплинути на інші сеанси.
У крайніх випадках незакрите з'єднання може повністю блокувати доступ інших користувачів до цілих безлічам таблиць, завдаючи величезної шкоди продуктивності додатка. Закриття з'єднань бази даних повинне вважатися обов'язковим, тому в цьому розділі ми продемонструємо структуру коду, яка мінімізує ризик залишення ресурсів у відкритому стані.
Варіант забезпечення очищення ресурсів полягає в застосуванні блоків try. catch. finally, і він гарантує закриття будь-яких відкритих з'єднань всередині блоку finally. Розглянемо короткий приклад: