Подключение к базе данных. Установление связи с объектом ADO. Эквивалент из комплекта BDE

Событие возникает перед выполнением команды. Параметры:
  • Source - строка, содержащая оператор SQL или имя хранимой процедуры.
  • CursorType - тип курсора для Recordset, который будет открыт. Тип курсора можно изменять. Возможные значения:
    • adOpenUnspecified(-1) - тип курсора не определён.
    • adOpenForwardOnly(0) - определяет forward-only курсор. То же, что и статический курсор, но вы можете прокручивать записи только вперед. Это оптимизирует выполнение, если вы должны сделать только один проход по Recordset"у.
    • adOpenKeyset(1) - Определяет keyset-курсор. То же, что и динамический курсор, но вы не можете видеть записи, добавляемые другими пользователями, хотя записи, удаляемые другими пользователями, недоступны в вашем Recordset"е. Изменения данных другими пользователями видимы.
    • adOpenDynamic(2) - Определяет динамический курсор. Добавления, изменения и удаления другими пользователями видимы; разрешены все типы движения через Recordset, исключая закладки, если провайдер их не поддерживает.
    • adOpenStatic(3) - Определяет статический курсор. Статическая копия набора записей, которую вы можете использовать, чтобы найти данные или генерировать отчёты. Добавления, изменения или удаления другими пользователями не видимы.
  • LockType - тип блокировки для Recordset, который будет открыт. Возможные значения:
    • adLockUnspecified(-1) - тип блокировки не определён.
    • adLockReadOnly(1) - только для чтения. Вы не можете изменить данные.
    • adLockPessimistic(2) - пессимистическая блокировка. Провайдер гарантирует успешное редактирование записей. Запись блокируется сразу после начала редактирования и до момента сохранения записей.
    • adLockOptimistic(3) - оптимистическая блокировка. Провайдер осуществляет блокировку записей только в момент сохранения изменений, т.е. когда вы вызываете метод Update().
    • adLockBatchOptimistic(4) - оптимистические пакетные модификации. Требуется для пакетного режима модификации (отложенное сохранение записей).
  • Options - целое число (long), указывающее опции выполнения команды или открытия Recordset"а.
  • adStatus - определяет состояние события. Возможные значения - см. описание аналогичного параметра события ConnectComplete.
  • pCommand - объект Command, для которого применяется это событие.
  • pRecordset - объект Recordset, для которого применяется это событие.
  • pConnection - объект Connection, для которого применяется это событие.
Событие WillExecute может произойти из-за вызовов Connection.Execute, Command.Execute, или Recordset.Open. Параметр pConnection всегда содержит ссылку на объект Connection. Если событие происходит из-за вызова Connection.Execute, параметры pRecordset и pCommand будут установлены в Nothing. Если событие происходит из-за вызова Recordset.Open, параметр pRecordset будет содержать ссылку на объект Recordset, а параметр pCommand будет установлен в Nothing. Если событие происходит из-за вызова Command.Execute, параметр pCommand будет содержать ссылку на объект Command, а параметр pRecordset будет установлен в Nothing.

5. 5 Технология доступа к данным ADO

Технология доступа к данным ADO

Основные особенности технологии доступа к данным ADO

Технологии ODBC и OLE DB считаются хорошими интерфейсами передачи данных, но как программные интерфейсы имеют много ограничений, т.к. являются низкоуровневыми.

Для снятия этих ограничений была предложена технология ADO (Delphi 5).

Технология ADO представляет иерархическую модель объектов для доступа к различным OLE DB-провайдерам данных. Объектная модель ADO включает объекты, обеспечивающие соединение с провайдером данных, создание SQL-запросов к данным и т.д.

Модель объекта не содержит таблиц, среды. Здесь основными объектами являются:

    объект Набор данных;

    объект Соединение, создающий связь с провайдером данных;

    объект Команда –выполнение процедуры.

Особенностью технологии ADO является возможность ее использования в Интернет-приложениях для доступа к различным источникам данных.

Технология ADO и интерфейсы OLE DB обеспечивают для приложений единый способ доступа к источникам данных различных типов (рис.1).

Рис. 1. Схема доступа к данным через ADO

В целом технологию ADO можно охарактеризовать как наиболее современную технологию разработки приложений для работы с распределенными БД по технологии клиент-сервер.

Компоненты ADO

Эта технология аналогична BDE по назначению и довольно близка по возможностям. Используемые компоненты для доступа к данным также довольно похожи на соответствующие компоненты BDE. Поэтому, не вдаваясь в подробности, рассмотрим только особенности компонентов ADO при работе с локальными базами данных. Главное отличие состоит в процедуре настройки связи с таблицей базы данных.

Все использующие ADO компоненты доступа к данным размещены на странице ADO палитры компонентов (рис.2).

Рис. 2. Компоненты ADO

TADOConnection аналогичен компоненту BDE TDatabase и используется для указания базы данных и работы транзакциями. С одним компонентом TADOConnection может быть связанно несколько компонентов TADOTable и TADOQuery.

TADOTable используется для доступа к хранилищам данных ADO и представляет полученную информацию в виде таблицы.

TADOQuery позволяет выполнять SQL-запросы при работе с данны­ми через ADO. Соединение с хранилищем данных осуществляется стандарт­ным методом. Текст запроса содержится в свойстве SQL.

TADOStoredProc позволяет обращаться к хранимым процедурам, содержащимся в базах данных. Имя хранимой процедуры определяется свойством ProcedureName.

TADODataSet предназначен для представления набора данных из хранилища ADO.

TADOCommand и TADODataSet являются наиболее общими компонентами для работы с ADO, но и наиболее сложными в работе. Оба компонента позволяют выполнять команды на языке провайдера данных (так в ADO называется драйвер базы данных).

Установление связи с объектом ADO

В ADO компонентах для доступа к БД используется, так называемая строка подключения ConnectionString: WideString. В строке подключения указываются параметры подключения к БД такие как местоположение и имя БД, провайдеры, пароли необходимые для подключения и т.д. Запомнить состав строки и ее синтаксис довольно сложно, поэтому для ее настройки используется специальный мастер.

Первый шаг задания свойства ConnectionString, это выбор способа определения подключения. База данных может быть указана двумя способами: через файл формата Microsoft Data Link (расширение UDL) либо прямым заданием параметров соединения (рис. 3).

Рис. 3. Выбор способа определения строки подключения

При прямом задании соединения значение свойства ConnectionString может быть задано напрямую в поле ввода окна диалога ConnectionString. Однако обычно проще использовать специальный мастер, вызываемый щелчком на кнопке с многоточием в конце поля ввода. При этом открывается окно диалога Data Link Properties, в котором выбираются тип базы данных, ее местоположение и параметры соединения (см. рисунок 4). Данное окно диалога содержит четыре вкладки:

    на вкладке Provider (Поставщик данных) выбирается тип БД. Базы данных Microsoft Access доступны через драйверы Microsoft Jet OLE DB Provider и Microsoft OLE DB Provider for ODBC. Базы данных dBase, Paradox и FoxPro доступны только через ODBC;

Рис. 4. Диалоговое окно настройки параметров соединения: выбор провайдера

    состав элементов управления вкладки Connection (Подключение) зависит от выбранного типа БД (рис. 5). Рассмотрим вариант выбора соединений Microsoft Jet 4.0 OLE DB Provider:

    флажок Blank password подавляет отображение окна диалога для ввода идентификатора и пароля пользователя при установлении соединения, если поле пароля пустое;

    флажок Allow saving password сохраняет пароль в строке параметров соединения. Если флажок не установлен, то введенный пароль будет использоваться только при выполнении тестового соединения;

    кнопка Test Connection позволяет проверить правильность и полноту параметров;

    переключатель Use data source name позволяет ввести предустановленный псевдоним ODBC, а в положении Use connection string вводится как псевдоним, так и тип ODBC драйвера и параметры соединения;

    путь к базе данных задается в поле ввода Select or enter a database name для соединения Microsoft Jet OLE DB Provider или в поле ввода Use data Source name для соединения Microsoft OLE DB Provider for ODBC. Причем в первом случае при щелчке на кнопке с многоточием, расположенной справа от поля ввода, появится окно диалога открытия файла, с помощью которого выбирается необходимый файл базы данных. Во втором случае путь к базе данных приходится вводить вручную;

Рис. 5 – Окно диалога DataLinkProperties(вкладка Подключение)

    на вкладке Advanced (Дополнительно) (рис.6) расположены дополнительные параметры, с помощью которых устанавливаются уровень доступа к файлу базы данных, время ожидания сетевого соединения (то есть время, через которое связь будет считаться потерянной, если сервер не отвечает) и уровень защиты соединения;

Рис. 6 – Окно диалога DataLinkProperties(вкладка Дополнительно)

    на вкладке All (Все) (рис. 7) можно отредактировать все параметры с предыдущих страниц и параметры, зависящие от выбранного соединения, не помещенные на вкладку Connection. Редактирование осуществляется путем ввода значений параметров в текстовой форме. Описание этих параметров можно найти в следующих документах: MSDN Data Access Services, Microsoft Data Access Components (MDAC) SDK, Microsoft ActiveX Data Objects (ADO), Microsoft ADO Programmers Reference, Using Providers with ADO.

Рис. 7 – Окно диалога DataLinkProperties(вкладка Все)

В остальном, работа с компонентом ADOTable и ADOQuery практически ничем не отличается от работы аналогичных компонентов использующих механизм доступа BDE.

Аннотация: На этой лекции мы поговорим о механизмах доступа к данным BDE и ADO, обсудим их плюсы и минусы. Создадим базу данных с помощью программы MS Access. Затем создадим приложение, которое работает с этой базой данных, используя механизм ADO.

С самого появления технологии баз данных программисты испытывали потребность в механизмах доступа к этим самым данным. Различные компании по-своему пытались предоставить им такую возможность. Например, для работы с таблицами типа dBase была создана Система Управления Базами Данных (СУБД ) Clipper . Для времен операционной системы MS-DOS - превосходное решение. Однако Clipper не мог работать ни с какими другими типами таблиц. И чем больше типов данных появлялось, тем острее вставала необходимость разработать универсальный инструмент доступа, который мог бы работать с любым типом данных.

Механизм доступа к данным - это программный инструмент, позволяющий получить доступ к базе данных и ее таблицам. Как правило, это драйвер в виде *.dll файлов, который устанавливается на ПК разработчика (и клиента), и который используется программой для связи с БД.

Сравнение BDE и ADO

Borland Database Engine (BDE) - первая такая разработка фирмы Borland . Этот механизм доступа к данным позволяет обращаться к локальным и файл-серверным форматам баз данных dBase , FoxPro и Paradox , к различным серверам SQL и ко многим другим источникам данных, доступ которых поддерживался при помощи драйверов ODBC . Например, с помощью BDE можно напрямую работать с табличными файлами MS Excel . Увы, механизм доступа BDE признается устаревшим даже самой компанией Borland . В данный момент многие инструменты Delphi являются кросс - платформенными, то есть, программы с небольшими доработками можно переносить на другие операционные системы. Корпорация Borland выпустила новую среду быстрой разработки программ - Kylix , на которой создаются приложения для операционных систем семейства Linux . Часто говорят, что Kylix - это Delphi для Linux . Так и есть - если вы умеете программировать на Delphi , сумеете и на Kylix . Большинство инструментов Delphi были унаследованы Kylix , но, увы, не BDE . Дальнейшее развитие этого механизма доступа к данным корпорацией Borland прекращено.

Тем не менее, хоронить его рано. Многие программисты до сих пор используют данный инструмент в разработке приложений для небольших компаний. Да что там говорить, китайская компания Huawei , разрабатывающая современнейшие электронные АТС как для городских, так и для мобильных телефонов, до сих пор использует BDE для доступа к настройкам и статистическим данным этих АТС! Кроме того, BDE имеет множество простых и удобных возможностей для программиста, таких например, как создание таблиц программно.

Удобство работы с BDE трудно переоценить, однако нельзя не сказать и о минусах. Основной минус - распространение приложений. Если ваше приложение использует для доступа к данным компоненты BDE , то и у клиента, который будет пользоваться вашей программой, должен быть установлен BDE . Причем если вы использовали алиасы (псевдонимы базы данных), то настройка на эти же алиасы должна быть и у клиента. Впрочем, создание инсталляционного пакета при помощи стандартной утилиты Install Shield Express снимает эту проблему. Эта утилита позволяет включать настроенный механизм BDE в состав инсталляционного пакета вашей программы. Конечно, за это приходится расплачиваться большими размерами инсталляционного файла.

Другой минус касается не только BDE , но и любого другого универсального механизма доступа к данным . Универсальность такого механизма подразумевает сложность его реализации. Программисту предоставляется уже готовый инструмент, с которым удобно работать, однако этот инструмент достаточно "тяжелый" - используя его, вы довольно существенно увеличиваете размеры своего приложения.

На предыдущем курсе "Введение в программирование на Delphi " мы затрагивали работу с базами данных посредством BDE . Больше к этим темам мы возвращаться не будем, хотя изредка будем обращаться к BDE , чтобы продемонстрировать те или иные возможности, отсутствующие в других механизмах доступа к данным, или отличающиеся от них. Поэтому если вы пропустили этот курс, то хотя бы бегло просмотрите работу с BDE в лекциях 29-32.

ActiveX Data Object (ADO) - это механизм доступа к данным , разработанный корпорацией Microsoft . Если точнее, то ADO - это надстройка над технологией OLE DB , посредством которой можно связываться с различными данными приложений Microsoft . В середине 1990-х годов большое развитие получила технология COM , и корпорация Microsoft в связи с этим объявила о постепенном переходе от старой технологии ODBC к новой OLE DB . Однако технология OLE DB достаточно сложная, использование этой технологии происходит на системном уровне и требует от программиста немало знаний и труда. Кроме того, технология OLE DB очень чувствительна к ошибкам, и "вылетает" при первом удобном случае. Чтобы облегчить программистам жизнь, корпорация Microsoft разработала дополнительный прикладной уровень ADO , который мы будем изучать на этом курсе.

По своим возможностям ADO напоминает BDE , хотя конечно, является более мощным инструментом. Компания Borland разработала набор компонентов для доступа к ADO и первоначально назвала его ADOExpress . Однако корпорация Microsoft упорно противится использованию своих обозначений в продуктах сторонних разработчиков, поэтому, начиная с Delphi 6, этот набор компонентов стал именоваться dbGo . Эти компоненты вы можете увидеть на вкладке ADO палитры компонентов .

Технология ADO , как и BDE , независима от конкретного сервера БД, имеет поддержку как локальных баз данных различных типов, так и некоторых клиент-серверных БД. Плюсов у этой технологии много. Драйверы, разработанные корпорацией Microsoft для собственных нужд, более надежные, чем драйверы сторонних производителей. Поэтому если вам требуется работать с базами данных MS Access или для архитектуры клиент-сервер использовать MS SQL Server , то использование ADO будет наиболее предпочтительным. Кроме того, имеется плюс и в вопросе распространения программ - во всех современных Windows встроены драйверы ADO . Другими словами, ваша программа будет работать на любом ПК, где установлен Windows .

Как ни странно, но основной минус так же заключается в вопросе распространения программ. Корпорация Microsoft поступает довольно хитро. Каждые пару-тройку лет появляются новые версии Windows . Рядовому пользователю обычно нет нужды переходить на свежую ОС, тем более что каждая новая система становится все требовательней к ресурсам ПК. Для того чтобы заставить пользователя перейти на новую версию, корпорация Microsoft обязательно вводит несколько новых стандартов или технологий, несовместимых со старыми. А для старых версий доработок не предусматривается. Вот и приходится бедному пользователю скрепя зубы тратиться на новые версии операционной системы и пакета MS Office . Поэтому при использовании технологии ADO приходится думать о том, какая версия Windows стоит у конечного пользователя, будет ли ваша программа работать у него на ПК.

Технология ADO на самом деле является частью Microsoft Data Access Components (MDAC) . Компания Microsoft распространяет MDAC как отдельный продукт, к счастью, бесплатный. При этом поддерживается только самая последняя версия MDAC . Например, в состав Delphi 7 входит MDAC 2.6 . При распространении собственных программ следует учитывать, что у клиента с большей долей вероятности уже установлена эта самая MDAC , причем самой последней версии. Однако если он пользуется старыми версиями Windows (Win95, 98, ME, NT), то вам потребуется позаботиться об установке MDAC на его компьютер. Если же у него установлена ОС Win2000, WinXP или более новая, то MDAC у него уже есть, и вам беспокоиться не о чем.

Еще один серьезный минус ADO в том, что он для подключения к БД использует довольно медлительную технологию COM . Если ваша база данных будет содержать несколько тысяч записей, то скорость работы с таблицами может стать в сотни раз более медленной, чем если бы вы использовали BDE ! На современных ПК, имеющих частоту процессора до 2 ГГц и выше, эти замедления могут быть и незаметны, но работа с огромной базой данных на более медленных ПК превратится в сплошное ожидание.

Основными компонентами, с которыми нам предстоит работать, являются TADOConnection (для подключения к БД), TADOTable (аналог TTable из BDE ), TADOQuery (аналог TQuery из BDE , для выполнения запросов и получения набора данных) и TADODataSet (предназначенный для набора данных, полученных через SQL-запрос).

Создание базы данных MS Access

Базы данных MS Access имеют много плюсов, часто программисты предпочитают использовать именно их. Во-первых, база данных MS Access - это один файл. Сколько бы таблиц и индексов она не содержала, все это хранится в одном единственном файле. А значит, такую базу данных легче обслуживать - переносить на новое место, делать резервные копии и так далее. Еще один плюс - имена полей в такой БД можно давать русскими буквами.

Лучше всего изучать новый материал на практике. Для примера создадим базу данных для отдела кадров какого-нибудь предприятия. Какие данные на сотрудника нам понадобятся? Прежде всего, фамилия, имя и отчество. Затем укажем пол (мужской или женский), семейное положение (холост или женат/замужем), количество детей. Также понадобятся дата рождения и дата поступления на работу. Стаж работы в годах. Образование. Военнообязанный сотрудник, или нет. Телефоны, по которым можно связаться с сотрудником в любое время. Должность сотрудника и отдел (если есть), в котором он числится. А также его домашний адрес. При этом учитываем, что сотрудник не обязательно является жителем города, где он работает. А вдруг он приехал на заработки из другого города? Или даже из другой страны? Следовательно, придется вводить и страну, и город - вдруг потребуется делать отчет по сотрудникам, прописанным в Украине, например? Вот сколько данных нужно будет вводить для отдела кадров! А ведь мы еще немного упростили их. Стаж работы подразделяется на общий и непрерывный. Эти данные учитываются при расчете больничных листов. Но для учебной базы данных такими деталями можно пренебречь.

Итак, первым делом оптимизируем данные, исходя из правил трех нормальных форм . В результате получаем целых четыре таблицы:


Рис. 2.1.

Главной здесь будет таблица LichData , которая содержит основные данные о сотруднике. Она имеет релятивные связи с другими таблицами. Поле "Ключ" будет автоинкрементным, то есть автоматически будет прибавляться на единицу, гарантируя нам уникальность ключа . В подчиненных таблицах имеется поле "Сотрудник" целого типа, по которому будет обеспечиваться связь. Причем ключевых полей в дочерних таблицах не будет.

Главная таблица поддерживает связь один-к-одному с таблицами Doljnost и Adres , и связь один-ко-многим с таблицей Telephones , ведь у сотрудника наверняка есть и домашний, и рабочий телефоны, а в карманах, возможно, лежит пара мобильников. То есть, один сотрудник может иметь много телефонов.

С полями и связями определились, пора создавать базу данных. Для этого загрузите программу MS Access .

Если в правой части окна у вас нет панели "Создание файла", то выберите команду "Файл -Создать". Затем выберите команду "Новая база данных". Сразу же выйдет запрос с именем этой базы данных. Создайте папку, которая все равно нам понадобится для нового проекта, укажите эту папку, а базу данных назовите ok (отдел кадров). Как только вы нажмете кнопку "Создать", появится окно этой базы данных:


Рис. 2.2.

Сейчас нам потребуется сделать четыре таблицы. Поэтому дважды щелкаем по команде "Создание таблицы в режиме конструктора", и переходим к конструктору. В левой части мы вводим имя поля, причем русскими буквами. В поле "Тип данных выбираем тип", а на вкладке "Общие" делаем настройки поля. Описание поля заполнять необязательно. Итак, создаем поля:

  1. "Ключ". Разумеется, имя поля пишем без кавычек. Выбираем тип данных "Счетчик", это автоинкрементный тип данных. В настройках убедитесь, что поле индексированно - Да (Совпадения не допускаются). Правой кнопкой щелкните по этому полю и выберите команду "Ключевое поле". Слева от поля появится значок ключа.
  2. "Фамилия". Тип поля текстовый, размер 25 символов. Индексированное поле - Да (Совпадения допускаются). Ведь могут же попасться родственники или однофамильцы!
  3. "Имя". Тип поля текстовый, размер 25 символов. Индексированное поле - Да (Совпадения допускаются).
  4. "Отчество". Тип поля текстовый, размер 25 символов. Индексы не нужны.
  5. "Пол". Текстовый, размер 3 символа. В формате поля укажите "муж/жен", конечно, без кавычек.
  6. "Сем_Полож". Логический тип, формат поля "Да/Нет". Здесь мы будем указывать, состоит ли сотрудник (сотрудница) в браке.
  7. "Детей". Числовой тип, размер поля Байт (трудно представить, что у кого-то будет более 255 детей!).
  8. "Дата_Рожд". Тип поля - Дата/Время. Выберите формат "Краткая форма даты". Затем выберите тот же формат для поля "Маска". При попытке выбора маски выйдет запрос на подтверждение сохранения таблицы. Ответьте утвердительно, а вместо имени таблицы по умолчанию "Таблица 1" впишите " LichData ", так будет называться наша первая таблица. После этого появится окно создания маски ввода. Выберите "Краткий формат даты", нажмите "Далее", после чего в окне "Маска ввода" наберите "00.00.0000". В результате мы будем иметь маску в виде "дд.мм.гггг".
  9. "Дата_Пост". Все то же самое, что и в №8.
  10. "Стаж". Тип поля числовой, размер - байт.
  11. "Образование". Текстовый, размер поля 30 символов. Ведь здесь может быть и длинный текст, например "неоконченное высшее техническое".
  12. "Военнообязанный". Логический тип, формат "Да/Нет".

В результате получим такую картину.

Errors

Объект ADO.Connection, подключение к базе данных из VBScript, свойство ConnectionString, генерация строки подключения OLE DB при помощи файла UDL, обработка ошибок при подключении к базе данных, коллекция Errors

Создание объекта Connection производится очень просто. Например, чтобы подключиться к базе данных Northwind на сервере SQL Server с именем LONDON , можно использовать код вида

Dim cn

cn.Provider = "SQLOLEDB"

& "Initial Catalog = Northwind "

cn .Open

В принципе, этого вполне достаточно, чтобы создать работающий объект соединения (чтобы в этом убедиться, можно, например, выполнить команду Wscript .Echo cn .State до и после открытия). Однако есть смысл подробнее поговорить про различные свойства и методы этого объекта.

· свойство Provider определяет драйвер, который будет использован для подключения к базе данных. Обычно используются два типа драйверов для подключения - драйверы OLE DB и ODBC . Если есть возможность, необходимо использовать подключение по OLE DB - более современный способ, который работает намного быстрее. Свойство Provider необходимо указывать только при подключении по OLE DB , при подключении по ODBC все необходимые параметры передаются при помощи свойства ConnectionString . Значения свойств Provider для подключения к разным источникам данных могут выглядеть так:

o "Microsoft .Jet .OLEDB .4.0" - для подключений к файлам Access и Excel и другим источникам данных на основе Jet ;

o "SQLOLEDB " - для подключений к SQL Server (как в примере)

o "MSDAORA .1" - для подключений к серверу Oracle ;

o "ADsDSOObject " - для подключения к базе данных службы каталогов Windows .

· свойство ConnectionString - главное свойство объекта Connection . Оно определяет параметры подключения к источнику (его значение представляет из себя набор параметров, разделенных разделителем - точкой с запятой, порядок их значения не имеет). В нашем примере мы передали четыре значения параметра - User ID - идентификатор пользователя (это значит, что мы используем подключение SQL Server ), Password - пароль password и Data Source - имя сервера баз данных, Initial Catalog - имя базы данных на этом сервере. Для передачи ConnectionString можно использовать и метод Open . Если бы использовали подключение Windows к SQL Server , код для подключения мог бы выглядеть так:

Dim cn

Set cn = CreateObject("ADODB.Connection")

cn.Open "Provider=SQLOLEDB;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Northwind;Data Source=london1"

При подключении к файлу Access или Excel строка подключения могла бы выглядеть так:

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Борей.mdb"

Проще всего создать строку соединения при помощи файла UDL . Для этого нужно создать обычный текстовый файл, переименовать его так, чтобы его расширение выглядело как.udl (от user data link ), щелкнуть два раза мышью и настроить параметры подключения. Потом можно открыть этот файл в блокноте и скопировать сгенерированную строку. Можно использовать в connection string и просто ссылку на созданный файл UDL :

cn.ConnectionString = "File Name = d:\mylink.udl"

Такой способ является более рекомендованным (особенно если файлы UDL находятся в скрытом сетевом каталоге, доступном только для чтения), поскольку обеспечивается возможность централизованного внесения изменений во все приложения, если источник данных переехал на другой сервер.

Для подключения по ODBC рекомендуется вначале создать источник данных ODBC (через Панель управления -> Источники данных (ODBC ), а затем точно так же сгенерировать строку подключения при помощи файла UDL , выбрав драйвер Microsoft OLE DB Provider for ODBC Drivers .

· метод Open позволяет открыть соединение с базой данных (и проверить его работоспособность). В качестве параметра может принимать строку подключения, имя пользователя и пароль.

· метод Close позволяет закрыть соединение (объект соединения при этом из памяти не удаляется). Чтобы полностью избавиться от этого объекта, можно использовать код

cn.Close

Set cn = Nothing

или просто Set cn = Nothing - разрыв соединения произойдет автоматически.

Для этого объекта предусмотрено множество других свойств и методов, однако здесь они рассматриваться не будут (за дополнительной информацией можно обратиться к документации или учебным курсам Microsoft ). Единственное свойство, которое обязательно необходимо рассмотреть - это свойство Errors , которое возвращает коллекцию объектов Error - ошибок. Ошибки при установке или работе соединения встречаются очень часто (неверно введен пароль или имя пользователя, у пользователя недостаточно прав на подключение, невозможно обратиться к компьютеру по сети и т.п.), поэтому настоятельно рекомендуется реализовывать в программе обработку ошибок. Самый простой вариант реализации обработчика ошибок может выглядеть так:

Dim cn

Set cn = CreateObject("ADODB.Connection")

cn.Provider = "SQLOLEDB"

cn.ConnectionString = "User ID=SA;Password=password;Data Source = LONDON1;" _

& "Initial Catalog = Northwind"

On Error GoTo CnErrorHandler

cn.Open

Exit Sub

CnErrorHandler:

For Each ADOErr In cn.Errors

Debug.Print ADOErr.Number

Debug.Print ADOErr.Description

Next

End Sub

На практике перехватываются ошибки, характерные для данного подключения (нет файла Access , ошибка пароля или имени пользователя при подключении к SQL Server , нет прав, файл открыт в исключительном режиме и т.п.). и пользователю предлагается исправить ошибку.

Самые важные свойства объекта ADOError :

· Description - описание ошибки. Обычно наиболее важная информация содержится именно в описании.

· Number - номер ошибки. По номеру удобно производить поиск в базе знаний и в Интернет.

· Source - источник ошибки. Эта информация полезна только в том случае, если в коллекции Errors могут оказаться ошибки из разных источников.

· SQLState и NativeError - информация о возникшей ошибке, которая пришла с SQL -совместимого источника данных.

Последнее обновление: 31.10.2015

Чтобы подключаться к базе данных, нам необходимо создать и использовать объект SqlConnection:

Using System; using System.Data.SqlClient; namespace AdoNetConsoleApp { class Program { static void Main(string args) { string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated Security=True"; // Создание подключения SqlConnection connection = new SqlConnection(connectionString); try { // Открываем подключение connection.Open(); Console.WriteLine("Подключение открыто"); } catch (SqlException ex) { Console.WriteLine(ex.Message); } finally { // закрываем подключение connection.Close(); Console.WriteLine("Подключение закрыто..."); } Console.Read(); } } }

В конструктор объекту SqlConnection передается строка подключения, которая инициализирует объект. Чтобы использовать этот объект и подключаться к базе данных, мы должны выполнить его метод Open() , а после завершения работы с базой данных нам надо вызвать метод Close() для закрытия подключения. В случае возникновения ошибок закрытие подключения происходит в блоке finally.

В качестве альтернативного метода можно использовать конструкцию using, которая автоматически закрывает подключение:

Static void Main(string args) { string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated Security=True"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); Console.WriteLine("Подключение открыто"); } Console.WriteLine("Подключение закрыто..."); Console.Read(); }

Асинхронное подключение

Для создания асинхронного подключения необходимо использовать асинхронный метод OpenAsync() :

Class Program { static void Main(string args) { ConnectWithDB().GetAwaiter(); } private static async Task ConnectWithDB() { string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated Security=True"; using (SqlConnection connection = new SqlConnection(connectionString)) { await connection.OpenAsync(); Console.WriteLine("Подключение открыто"); } Console.WriteLine("Подключение закрыто..."); } }

Получение информации о подключении

Объект SqlConnection обладает рядом свойств, которые позволяют получить информацию о подключении:

String connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated Security=True"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); Console.WriteLine("Подключение открыто"); // Вывод информации о подключении Console.WriteLine("Свойства подключения:"); Console.WriteLine("\tСтрока подключения: {0}", connection.ConnectionString); Console.WriteLine("\tБаза данных: {0}", connection.Database); Console.WriteLine("\tСервер: {0}", connection.DataSource); Console.WriteLine("\tВерсия сервера: {0}", connection.ServerVersion); Console.WriteLine("\tСостояние: {0}", connection.State); Console.WriteLine("\tWorkstationld: {0}", connection.WorkstationId); } Console.WriteLine("Подключение закрыто...");

Консольный вывод в моем случае:

Возможные ошибки и их решение

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

Unhandled Exception: System.ArgumentException: Keyword not supported...

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

Еще одна распространенная ошибка говорит о том, что данной базы нет или по крайней мере нет подобной базы данных для текущего пользователя:

Cannot open database "название базы данных" requested by the login. The login failed. Login failed for user "название_пользователя"

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

И еще одна часто встречающаяся ошибка:

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible...

В этом случае, как правило, SQL Server не запущен. И его надо запустить или перезапустить, через панель служб.

Также может быть, что в строке подключения указано неправильное имя сервера, либо MS SQL Server вообще не установлен.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: