69280

Підготовка і виконання запиту. Отримання даних. Відключення

Лекция

Информатика, кибернетика и программирование

Останнє, що додаток повинен зробити після підключення до джерела даних, але перш, ніж воно буде здатне здійснювати запити SQL, — це отримати дескриптор оператора (statement handle) або hstmt. Щоб отримати дескриптор hstmt, достаточш оголосити змінну типу SQLHSTMT і викликати функцію...

Украинкский

2014-10-02

41 KB

0 чел.

Лекція № 22

Тема: Підготовка і виконання запиту. Отримання даних. Відключення.

План

  1.  Підготовка і виконання запитів SQL
  2.  Отримання даних
  3.  Відключення від джерела даних

Підготовка і виконання запитів SQL

Останнє, що додаток повинен зробити після підключення до джерела даних, але перш, ніж воно буде здатне здійснювати запити SQL, — це отримати дескриптор оператора (statement handle) або hstmt. Щоб отримати дескриптор hstmt, достаточш оголосити змінну типу SQLHSTMT і викликати функцію SQLAllocHancUe, переду! їй як аргументи константу SQL_HANDLE__STMT і адреса оголошеною змінно» hstmt. Нижче приведений фрагмент коди, що демонструє, як це зробити:

 

SQLSTMT hstmt;

SQLRETURN re = SQLAllocHandle<SQL_HANDLE_STMT

hdbc, Shstmt);

Як тільки додаток отримає дескриптор hstmt, воно зможе передавати джерелу енних оператори SQL. Існує два разных способу організації виконання джерелом даних запиту SQL. Перший має на увазі застосування функції SQLExecDirect, другим аргументом якої є оператор SQL, як показано в прикладі, приведеному нижче. Ця функція додасть в таблицю UserMaster новий рядок даних:

SOLRETURN гс = ::SQLExecDirect(hstmt

(unsigned char*)"INSERT INTO " "UserMaster VALUES('USERLD' " "'User Name', 0)", SQL_NTS))

Другий спосіб виконання оператора має на увазі його попередню підготовку за допомогою функції SQLPrepare, а також його подальше виконання за допомогою функції SQLExecute, як показано в прикладі, приведеному нижче.

SQLRETURN re;

LPCSTR szSQL = "INSERT INTO UserMaster "

"values('UserlD2', 'Just Another User', 0) "/

if (SQL_SUCCESS == (re = ::SQLPrepare (hstmt

(unsigned char*)szSQL, SQL_NTS)))

( if (SQL_SUCCESS == (re = ::SQLExecute (hstmt)))

При частому виконанні різних операторів SQL подібна комбінація функцій SQLPrepare/SQLExecute набагато ефективніша, ніж просто виклик функції SQLExecDirect. Це пов'язано з тим, що при кожному виклику функції SQLExecDirect вираз повинен відкомпілюватися (compiled) основний DBMS. Проте при попередньому виклику функції SQLPrepare вираз відкомпілюється тільки один раз, а потім кожного разу використовуватиметься функцією SQLExecute в готовому вигляді.

Отримання даних

У попередньому розділі продемонстровані два разных способу застосування оператора SQL, що додає дані в таблицю. Але що, якщо в результаті виконання оператора SQL будуть повернені дані, і як передати їх в змінні застосування? Для цього призначена наступна група функцій ODBC. Коли функція ODBC повертає результуючий набір даних (result set) (або набір результатов— resuitset), змінні застосування необхідно пов'язати (bind) з полями повертаних даних. ODBC надає щонайширший набір різноманітних типів даних, доступних для застосування у складі застосування, що розробляється.

Якщо гнучкість додатку є одному з головних завдань проекту, то користь від застосування функцій SQLNumResultCols, SQLDescribeCol і SQLGetData в його складі буде вельми ощутима. Ці функції дозволяють розробникові створювати додатки баз даних, не піклуючись заздалегідь про те, скільки полів і якого типу повертатиме джерело даних у складі результуючого набору даних. Наприклад, ці функції можна було б використовувати у складі додатку, що дозволяє користувачеві самостійно формувати запити, передавані базі даних. У зв'язку з динамічним характером цього застосування йому не буде заздалегідь відома кількість і тип даних полів, повертаних в результаті їх виконання.

Оскільки ж додаток може дізнатися, які саме дані були повернені в результаті запиту, якщо це не було визначено заздалегідь, до виконання запиту? Додаток використовує функції, описані в попередньому розділі, для компіляції і виконання призначених для користувача операторів SQL. Потім ODBC повертає дескриптор результуючого набору даних. Але додатку нічого не відомо ні про кількість полів, повернених в результуючому наборі даних, ні про їх тип. Так, щоб визначити, скільки саме полів (стовпців) було повернено в результуючому наборі даних, додаток звертається до функції SQLNumResultCols. Потім воно викликає функцію SQLNumResultCols для кожного з полів, щоб з'ясувати тип розташованих в них даних. Як тільки тип даних певного поля стає відомий, застосовується функція SQLGetData, що дозволяє витягувати з нього значення. Безумовно, це опис вельми схемний, проте воно дає загальне уявлення про процес застосування цих функцій. Більш детально дана тема розглядається на прикладі другого і третього демонстраційних додатків цього розділу.

Цілком очевидно, що такий рівень гнучкості, який описаний вищим, потрібний зовсім не кожному застосуванню. Більшість розробників баз даних використовують оператори SQL, жорстко задані в коді застосування, а отже, їм не потрібно звертатися до ODBC, щоб з'ясувати тип даних повертаних в результуючому наборі даних. В цьому випадку для витягання даних з результуючого набору даних і привласнення їх змінним додатку можна скористатися функціями SQLBindCol і SQLFetch. Функція SQLBindCol, що відповідає за скріплення даних, дозволяє вказати номер поля результуючого набору даних, тип даних цього поля результуючого набору даних, а також адресу змінної додатку, яка отримає ці дані при виклику функції SQLFetch, що відповідає за вибірку зв'язаних даних.

Звернете увагу, немає ніякої необхідності зв'язувати всі поля, досить зв'язати лише ті поля, дані яких необхідно передати в змінні. Функцію SQLBindCol необхідно викликати один раз, але для кожного використовуваного поля, а функцію SQLFetch після цього можна викликати багато раз, при кожній необхідності прочитати результуючий набір даних. Нижче приведений приклад застосування обох функцій для отримання даних з результуючого набору даних. Цей фрагмент коди має на увазі, що оператори SQL, організуючі повернення результуючого набору даних, вже були виконані:

#define LEN_USERID 16

SDWORD cb;

char szUserID[LEN_USERID];

if (SQL_SUCCESS == (re = SQLBindCol(hstmt, 1

SQL_C_CHAR, szUserlD, LENJJSERID &cb))) {

if (SQL_SUCCESS == (re = SQLFetch(hstmt))) {

// Тепер szUserlD містить значення з першого

// поля поверненого набору результатів.

 

Відключення від джерела даних

Як тільки підключення до джерела даних стане непотрібним, від нього необхідно відключитися (за допомогою функції SQLDisconnect), а також звільнити всі дескриптори, які були для цього створені. Код "очищення" ("cleanup") для приведеного вище прикладу міг би виглядати таким чином:

if (henv)

{

if (hdbc)

{

if (blsConnected)

(

if <hstmtj

{ ::SQLFreeHandle{SQL_HANDLE_STMT, hstmt);

}

::SQLDisconnect(hdbc);

blsConnected = FALSE;

}

::SQLFreeHandle{SQL_HANDLE_DBC, hdbc);

hdbc = NULL;

}

::SQLFreeHandle(SQL_HANDLE_ENV, henv); henv = NULL;

}

Отже, вивчивши основи використання ODBC, розглянемо в наступному розділі демонстраційне застосування.


 

А также другие работы, которые могут Вас заинтересовать

38439. Синтез системы управления спуском космического аппарата на поверхность Марса методом интеллектуальной эволюции 1.52 MB
  Преодолеть указанные ограничения в данной работе предлагается путем ухода от построения оптимального управления как функции времени, так как оно не учитывает поведения системы уже в процессе функционирования и влияния этого поведения на дальнейшее состояние всей системы.
38440. Информационной безопасности облачных сервисов на базе мобильных облачных вычислений с использованием метода PP-CP-ABE 2.51 MB
  Целью данной работы является анализ существующих методов информационной безопасности и выбор соответствующего метода который должен подходить под соответствующие требования: Обеспечение надёжного шифрования данных при передаче их от пользователя к провайдеру услуг по хранению данных Минимизация нагрузки на облачные сервисы Возможность применения метода для лёгких мобильных устройств. Эффективные и безопасные операции по хранению данных для мобильного облачного вычисления. Параметры для хранения данных....
38441. Многокритериальный синтез позиционного управления с моделью 6-го порядка на основе метода формирования притягивающих многообразий 4.39 MB
  Можно выделить три типовых подхода в которых сгруппирован ряд известных методов. Это, так называемые, прямые интерактивные методы, например, на основе конусов доминирования и генетического программирования; методы скаляризации, такие как, свертка показателей, пороговая и лексикографическая оптимизация
38442. Исследование экономических показателей предприятия при помощи систем СТЭК 2.3 MB
  Исходные данные для среднестатистического предприятия олигополии В работе имеют место следующие исходные данные: годовая характеристика спроса на товар определяемая бюджетными ограничениями потребителей их предпочтениями и эластичностью вычислить по предложенной методике на базе Const=40 млн. год; доля капитала уплачиваемая за аренду оборудования = 150 год; показатели технологического процесса фирм ; ; планируемые производственные затраты фирм млн. допустимые значения ресурсов труда и капитала: чел; млн. 1 2 3 СТЭК 1 7 1...
38443. Разработка и исследование метода грамматической эволюции для структурно-параметрического синтеза системы управления динамическим объектом 1.63 MB
  Цель синтеза управления заключается в том, чтобы найти такое управление, при котором поведение объекта управления удовлетворяло бы заданным критериям. Данная задача до сих пор не решена аналитически в общем виде.
38444. Разработка и исследование метода сетевого оператора для логического вывода экспертной системы 1.29 MB
  Экспертные системы обычно определяют как программы ЭВМ, моделирующие действия эксперта-человека при решении задач в узкой предметной области на основе накопленных знаний, составляющих базу знаний. ЭС выдают советы, проводят анализ, дают консультации, выполняют классификацию и т.д. Практическое применение ЭС на предприятиях способствует значительному увеличению эффективности работы.
38445. Расчёт плиты опертой по контуру 210.72 KB
  22:2006 для торгових приміщень 15 12 18 Всего p=15 p=18 Полная Всего gp=8219 gp=9313 Поле плиты в осях 15АД: Нагрузка приходящая на всё поле плиты: Максимальные изгибающие моменты на полосе шириной 1м: для пролётных моментов: для опорных моментов: де табличные коэффициенты для опирания плиты. Для пролетных моментов: Для опорных моментов: Определяем пролетную арматуру в направлении lк: Rs = 355 МПа расчетное сопротивление арматуры растяжению для...
38446. Разработка мероприятий по совершенствованию управления мотивацией персонала ИП Correct Way 998 KB
  Внутреннее вознаграждение человек получает от работы ощущая значимость своего труда испытывая чувство к определенному коллективу удовлетворение от общения дружеских отношений с коллегами. Стимулирование труда предполагает создание условий при которых в результате активной трудовой деятельности работник будет трудиться более эффективно и более производительно т. Здесь стимулирование труда создает условия для осознания работником что он может трудиться более производительно и возникновения желания рождающего в свою очередь...
38447. Формирования требований к информационной системе учета материально-производственных запасов для ООО «КАРМА» 3.22 MB
  Теоретические основы по учету материалов. Целью данного дипломного проекта является анализ деятельности фирмы ООО КАРМА для формирования требований к информационной системе учета материальнопроизводственных запасов для ООО КАРМА Задачи дипломного проекта: рассмотреть теоретические основы по учету материалов; проанализировать особенности учета материалов в ООО КАРМА; сформировать требования к информационной системе учета материальнопроизводственных запасов для ООО КАРМА; В первой главе анализируются теоретические основы...