14.SQL/ODBC/OLEDB (укр)

14. Стандартні технології доступу до баз даних

14.1. Проблеми доступу до баз даних

В інтегрованих автоматизованих системах управління бази даних використовуються, як правило, для ведення історії подій та збереження значень даних для трендів. В цьому контексті можна виділити два способи доступу до даних: для запису та для читання. В області ІАСУ як правило доступаються до архівних баз даних такі прикладні програми:

-       SCADA-програми для запису плинних даних та читання історичних;

-       програми MES-систем для читання історичних даних рівня АСУТП та запису агрегованих показників;

-       програми ERP-систем для читання та запису організаційно-економічних даних;

-       службові програми та СУБД.

Дані в архів зберігаються, як правило, в тому форматі, який пропонує прикладна програма (наприклад SCADA). Тобто тип архіву та формат записуваних даних диктується вимогами цього програмного засобу, або вибирається з ряду стандартних. Рідше є можливість в корегуванні розміщення, типу та формату бази даних. Тому можна умовно пропустити, що при записі даних, проблеми з сумісністю не виникають.

Інша ситуація виникає при доступу до даних для читання. Якщо програмні засоби які пишуть дані і які їх читають підтримують різні формати, то виникає проблема пов’язана з сумісністю форматів, а отже і з доступом до даних для читання. Очевидно, що одне з рішень, яке може бути запропоновано – це вибір програмних засобів, які підтримують єдиний формат доступу баз даних. Однак як правило вибір програмних засобів часто виступає в якості обмеження при побудові систем, особливо коли останні впроваджується поетапно. Крім того такий підхід не дає гнучкості при реалізації системи, адже обмеження диктуються вибором засобів одного виробника. Інше рішення – це використання додаткового спеціалізованого програмного забезпечення, яке перетворює дані з одного формату в інший, або написання додаткових бібліотек. Такий підхід дорогий в рішенні і потребує тривалої апробації.

Найбільш простим рішенням яке, як правило, доступне в сучасних програмних засобах ІАСУ, є використання стандартних технологій доступу до баз даних. Серед них можна виділити використання СУБД з підтримкою стандартної мови запитів SQL, а також стандартних інтерфейсів доступу до баз даних ODBC та OLEDB. Крім наведених технологій є й інші відомі і можливо більш прогресивні рішення, однак на сьогоднішній день в системах ІАСУ вони поки що не знайшли великої популярності.

14.2. Мова SQL

SQL (Structured Query Language – мова структурованих запитів) – це універсальна мова для створення, модифікації і управління даними в реляційних базах даних. Дана мова описана в стандарті ANSI 1992 року як SQL2 (SQL-92). На сьогоднішній день практично всі відомі СУБД підтримують даний стандарт, з деяким розширеннями до нього для адаптації під свої формати даних та функціональні можливості серверів. Такі мови називають діалектами SQL. Так, наприклад діалект СУБД MS SQL Server має назву Transact-SQL.

SQL використовується для створення структури бази даних, маніпуляції з даними, тобто їх вибірки і модифікації, та для їх адміністрування. Будь яка операція по вибірці, модифікації, визначенню або адмініструванню виконується за допомогою оператору (statement) або команди (command) SQL.

Є дві можливості операцій по маніпуляції з даними – вибірка даних (data retrieval) і модифікація даних (data modification). Вибірка – це пошук необхідних даних, а модифікація означає добавлення, знищення або заміна даних. Операції по вибірці називають SQL запитами (SQL queries). Вони проводять пошук в базі даних, найбільш ефективно вибирають необхідну інформацію і відображають її. У всіх запитах SQL використовується ключове слово SELECT. Операції по модифікації виконуються відповідно з використанням ключових слів INSERT, DELETE та UPDATE.

На практиці частіше всього приходиться робити вибірку даних, тому коротко розглянемо оператор SELECT. Спрощена його конструкція має вигляд:

SELECT  список_стовбчиків

FROM таблиця[-ці]

[WHERE  умови],

де слова в квадратних дужках [] – не обов’язкові.

В списку стовпчиків (полів записів) вказуються ті поля таблиці, які повертаються після обробки запиту. Список таблиць визначає з яких таблиць необхідно проводити вибірку, а в умовах вказують умови для вибірки рядків.

Приклад 14.1.  Бази даних. Формування SQL-запитів 1.

Завдання. Записати запит для вибірки даних з поля (колонки) Value таблиці Group_1_1 бази даних Difuzija_1, які були записані після 19 вересня 2006 року. Дата запису знаходиться в полі Group_1_1.TDate.

Рішення.

SELECT Value     

FROM  Difuzija_1.Group_1_1

WHERE Group_1_1.TDate>'2006-09-19 00:00:00'

Приклад 14.2.  Бази даних. Формування SQL-запитів 2.

Завдання. Записати запит для вибірки даних з усіх полів таблиці Group_1_1 бази даних Difuzija_1, які були записані після 19 вересня 2006 року. Дата запису знаходиться в полі Group_1_1.TDate.

SELECT *     

FROM  Difuzija_1.Group_1_1

WHERE Group_1_1.TDate>'2006-09-19 00:00:00'

 

Повний синтаксис оператора SELECT має наступний вигляд:

SELECT [ALL|DISTINCT]  список_стовбчиків

FROM {таблиця | курсор}[,{таблиця | курсор}…]

[WHERE  умови]

[GROUP BY стовпчик [, стовпчик…]]

         [HEAVING умови]

[ORDER BY {ім’я_стовпчика | список_вибору}[ASC|DESC] ... ]

 

У списку SELECT вказуються ті поля (стовпчики), які необхідно повернути запитом. Є можливість зробити деякі операції над полями перед відображенням: +,-,*, /.

Умови в WHERE задаються операторами порівняння (=,<,>, >=, <=, != або <>), логічними (AND, OR, NOT), визначення діапазону (BETWEEN і NOT BETWEEN) та ін.

Ключове слово ORDER BY дозволяє упорядковувати знайдені записи по вказаному стовпчику по зростанню ASC, або по спаданню DESC.

14.3. ODBC та DAO

ODBC (Open Database Connectivity) – один із стандартних інтерфейсів доступу до реляційних баз даних, які засновані на мові SQL. Архітектура ODBC показана  на рис.14.1.
Зв’язок з різними джерелами даних проводиться за допомогою Драйверів ODBC, які оформлені у вигляді динамічних бібліотек (DLL) і підтримують єдиний інтерфейс ODBC API, що базується на виконанні SQL-запитів. Тобто, незалежно від типу джерела даних, прикладна програма генерує SQL-запити, які відправляються потрібному драйверу, що працює з даним джерелом. Драйвер забезпечує потрібне перетворення цих запитів в мову джерела, або сам виконує необхідні операції, що вказані в запиті.

Для користувача даної технології, необхідно зробити наступну послідовність операцій. В Адміністраторі ODBC, який знаходиться в панелі управління адміністратору Windows, створюється DSN (Data Source Name)  для необхідного джерела даних:

-       вибирається тип DSN: System DSN (доступний всім користувачам), User DSN (доступний плинному користувачу), File DSN (настройки зберігаються в окремому файлі);

-       вказується ім’я DSN;

-       вибирається драйвер ODBC;

-       налаштовується драйвер для конкретного джерела даних.

В клієнтській прикладній програмі в якості джерела даних вказується ім’я DSN. З’єднання прикладної програми з необхідним джерелом даних забезпечиться Диспетчером Драйверів (Driver Manager),  який реалізований у вигляді бібліотеки ODBC.DLL (рис.14.1).

При написанні прикладних програм з використання ODBC більш зручний доступ до ODBC через RDO  та  DAO (рис.14.2). RDO (Remote Data Object) – являється об’єктним інтерфейсом доступу до ODBC джерел даних.


DAO (Data Access Object) - являється об’єктним СОМ-інтерфейсом до процесора баз даних Jet (Joint Engine Technology database engine), а також до надбудовою над RDO-інтерфейсом. Режим ODBCDirect перетворює всі об’єкти та методи DAO в еквівалент  RDO.

Приклад 14.3.  Бази даних. Доступ до змінних Citect через ODBC інтерфейс.

Завдання. Використовуючи технологію ODBC забезпечити періодичне відновлення даних в комірках листу Microsoft Excel, що посилаються на змінні з прикладу 13.3. (розділ OPC

Рішення. SCADA Citect надає можливість доступу до бази даних реального часу через інтерфейс ODBC. При інсталяції SCADA на комп’ютер, в списку драйверів ODBC з’явиться драйвер CitectDriver 

Для створення DSN викликаємо Адміністратор джерел даних: "Пуск"-> "Настройка"->"Панель управления"-> "Администрирование"->"Источники данных ODBC". На вкладці "Системные DSN " створюємо DSN типу CitectDriver. Настроюємо DSN як на рис.14.3. Якщо необхідно з’єднатися з Citect на іншому ПК, замість LOCALHOST вказується ім’я даного ПК.

В Microsoft Excel створити зв’язок з зовнішніми даними, використовуючи майстра по створенню SQL запитів MicrosoftQuery:

1.      "Данные"->"Импорт внешних данных"->"Создать запрос";

2.      Вибрати джерело даних з іменем Citcet;

3.      Вибрати стовбці NAME,VALUE;

4.      На відповідній вкладці вибрати "Просмотр или изменение в Microsoft Query", а потім нажати кнопку SQL, для перегляду створеного майстром запиту (рис.14.4).

5.      Після закриття MicrosoftQuery, вказати ячейки, де будуть розмішуватися данні.

Для автоматичного періодичного відновлення даних, в контекстному меню комірок з імпортованими даними вибираємо "Свойства диапазона данных"->"Обновлять каждые"->"1 мин".

14.4. OLE DB, ADO та ADO.NET

Альтернативою ODBC є OLE DB – це об’єктно-орієнтована технологія доступу до даних, яка базується на COM. Спеціалістами Microsoft запропонована стратегія універсального доступу до будь яких джерел даних UDA (Universal Data Access), де драйвери OLE DB займають нижній щабель ієрархії (рис.14.5). В цій архітектурі виділяються OLE DB Consumers (OLE DB Споживачі) – це будь-яка частина прикладної програми, яка користується OLE DB-інтерфейсами та OLE DB Providers (OLE DB Провайдери) – це частина прикладної програми, яка надає свої послуги через OLE DB-інтерфейси.

Розрізняють два види OLE DB Провайдерів: OLE DB Провайдер Даних (OLE DB Data Provider), OLE DB Провайдер Сервісів (OLE DB Service Provider). OLE DB Провайдер даних надає послуги доступу до власних баз даних у вигляді таблиць. Провайдер Сервісів не має власних даних, однак як Провайдер – він надає набір послуг (сервісів). Споживачі користуються цими сервісами, частина з яких використовує Провайдерів Даних для доступу до даних. Тобто Провайдер Сервісів по відношенню до Провайдерів Даних виступає як Споживач.
 

На відміну від ODBC, який надає доступ тільки до реляційних даних, OLE DB може надати доступ до будь якого джерела даних, оскільки базується на об’єктній моделі, яка спроектована для представлення даних довільного формату. Для сумісності з розробленими ODBC драйверами, OLE DB має інтерфейс доступу до них через Провайдера ODBC. Інтерфейс OLE DB – складний в реалізації і призначений для розробки драйверів для нового типа джерела даних. Для кінцевого користувача необхідно мати зручний і легко зрозумілий прикладний інтерфейс (API), яким служить технологія ADO.

ADO (ActiveX Data Object) визначає модель програмування – послідовність дій, які необхідні для отримання доступу та модифікації джерела даних. Це об’єктна модель, тобто представляє собою набір об’єктів зі своїми методами, властивостями та подіями.

Модель базується на наступних ключових поняттях.

1.     Connection (Підключення) - це джерело даних, з яким необхідно з’єднатися, може бути представлений у вигляді символьного Рядка Підключення (Connection String)  або Uniform Resource Locator (URL). В рядку вказується вся послідовність (транзакція) підключення, частини (кроки) якої розділені спеціальними роздільниками. В Рядку Підключення спочатку вказується Провайдер  OLE DB, а потім всі інші параметри, які відрізняються в залежності від Провайдера. Слід зазначити, що транзакція виконується повністю, або не виконується взагалі, тобто виконання підключення до частини вказаної в Рядку Підключення неможливе. 

2.     Command (Команда) – вказує операцію, яку необхідно зробити з джерелом даних визначених Підключенням (добавити, знищити, модифікувати, знайти дані по заданим параметрам).  Розрізняють декілька типів команд:

-       по замовченню: тип команди визначається самим Провайдером;

-       текст (SQL) : команда записується у вигляді SQL-виразу;

-       таблиця: команда являє собою назву таблиці, всі колонки якої повертаються з запитом;

-       збережена процедура (stored procedure) – назва процедури, яка повинна бути викликана;

-       файл: вказується ім’я файлу, з яким необхідно з’єднатися.  

1.     Parameters (Параметри) – це параметри команди, які можуть змінюватися. Команда може виступати як функція, тобто частина команди незмінна, а інша частина виступає в якості параметрів (параметричні запити).

2.     Recordset – це об’єкт, за допомогою якого можна доступитись до рядків таблиці, які повертає Команда-запит.

3.     Field (Поле) – об’єкт, який надає доступ до полів об’єкту Recordset.

4.     Error (Помилка) – об’єкт, який містить в собі інформацію про помилку. Ці об’єкти асоціюються з кожним Підключенням.

5.     Property (Властивість) – кожний ADO-об’єкт має набір динамічних та статичних властивостей.

6.     Record (Запис) – це об’єкт, який надає доступ до даних, які представляються у вигляді контейнеру (container) та місткості (content). Для прикладу в файловій системі каталоги – це контейнери, які можуть вміщувати інші каталоги (контейнери) або файли (місткість). Цей об’єкт дає можливість працювати з нереляційними даними.

7.     Stream(Потік) – це об’єкт, за допомогою якого можна працювати з потоками байтів файлів чи буферів пам’яті (дані content).

8.     Collection (Колекція) – це об’єкт, який вміщує декілька об’єктів одного типу, до яких можна доступитися по імені, чи індексу.

9.     Event (Подія).

Таким чином для доступу до даних за допомогою ADO, та їх модифікації необхідно провести таку послідовність:

1.     Вказати джерело даних для Підключення, тобто його розміщення в Рядку Підключення або в URL. Виконати з’єднання з вказаним джерелом.

2.     Визначити Команду для доступу до джерела даних,  її тип та при необхідності параметри. Виконати команду.

3.     Для реляційних баз даних результати виконання команди у вигляді таблиці записуються в кеш. При необхідності їх можна модифікувати за допомогою об’єкту Recordset.

 Технологія ADO, в якості API інтерфейсу OLE DB, надає стандартні сервіси та методи роботи з даними незалежно від Провайдеру даних. Однак, в зв’язку зі специфікою останніх, можливі деякі особливості при їх використанні. Відмінності, як правило, стосуються Рядку Підключення (Connection String), використання Команди та об’єкту Recordset. Зупинимося на основних правилах формування Рядку Підключення та Команди.

Рядок Підключення (Connection String) формується з послідовності виразів типу аргумент=значення  розділених крапкою з комою. Типові аргументи наведені в табл.14.1

Таблиця 14.1

Типові аргументи ADO

Аргумент

Пояснення

Provider=

Назва Провайдеру даних

File Name=

Назва файлу, де зберігаються наперед визначені настройки Підключення

Remote Provider=

Назва віддаленого Провайдеру (тільки для Remote Data Service)

Remote Server=

Шлях до віддаленого серверу (тільки для Remote Data Service)

URL=

URL-шлях до файла чи папки

Команда (Command) вказується за допомогою текстового рядку. Правила його формування залежать від типу команди. Зазвичай - це команда SQL, діалект якої залежить від Провайдеру даних, однак це може бути інший текст.

На сьогоднішній день найбільш використовувані Провайдери Даних: Microsoft OLE DB Provider for ODBC,  OLE DB Provider for Microsoft Jet, Microsoft OLE DB Provider for SQL Server. Для більш детальної інформації по викладеному матеріалу та використання описаних технологій в інструментах програмування можна звернутися до довідкової інформації в MSDN.

Все більшого використання набуває технологія .NET, яка лягла в основу стандартного механізму доступу до даних під назвою ADO.NET. Так само як ADO базується на OLE DB, ADO.NET базується на .NET Framework. Принципи застосування залишилися однакові. На момент написання книги відомі такі провайдери від Microsoft:

- Провайдер даних NET Framework для SQL-сервера;

- Провайдер даних .NET Framework для OLE DB;

- Провайдер даних .NET Framework для ODBC;

- Провайдер даних .NET Framework для Oracle.

Як видно зі списку, технологія ADO.NET підтримує сумісність із OLE DB та ODBC.
 
Оставить комментарии Вы можете здесь http://pupena-san.blogspot.com 
 
 
 
 
 
Comments