Звернення до бази даних за допомогою ADO.NET

Для прямого звернення до бази даних за допомогою ADONET застосовуються іерфейси ADONET Першим кроком для отримання доступу буде визначення підключення Встановивши підключення, можна маніпулювати інформацією в таблицях бази даних – додавати, видаляти і оновлювати записи в таблицях

Ми будемо продовжувати працювати з базою даних для прикладу лотереї, створеної в попередніх розділах, застосовуючи для цього драйвер SQL Server Compact Edition ADONET Зокрема, ми займемося написанням коду для додавання, вибірки і видалення записів

ПРИМІТКА

Написання коду ADONET може бути легкою або трудомістким завданням з тієї причини, що драйвери ADONET відрізняються один від одного У цьому розділі ми будемо приділяти основну увагу першорядним аспектам ADONET, а не особливостям сервера SQL Server Compact Edition Додаткову інформацію про сервер SQL Server Compact Edition см на Web-сайті http://arcanecodewordpresscomflag/sql-server- compact-edition/

Підключення добазі даних встановлюється за допомогою наступного коду, демотрірующего загальний ПІДХІД (код додаєтьсяв додаток DatabaseConsoleEx): IDbConnection connection • = new SqlCeConnection (

DatabaseConsoleExPropertiesSettingsDefaultlotteryConnectionString)

Мінлива connection є екземпляром клієнта бази даних Використан цієї змінної можна порівняти з дією підняття телефонної трубки, коли ви хочете комусь зателефонувати Для підключення необхідно надати імя користувача, пароль та імя бази даних, до якої виконується подкленіе Вся ця інформація знаходиться у властивості lotteryConnectionString, сержімое якого було визначено, коли ми конфігурували джерело даних в Visual С # Express (див рис 143)

Маючи екземпляр підключення, потрібно його відкрити, що подібно наступного Детва після підняття телефонної трубки – набору номера Підключення що відкрили за допомогою наступного коду:

connectionOpen()

Тепер ми можемо працювати з таблицями бази даних

Створена таблиця draws не містить ніяких даних Заповнимо цю прогалину і додамо в неї вміст Для цього застосовується командаINSERT мови SQL, як показано в наступному коді:

IDbCommand cmd =

new SqlCeCommand(@&quotINSERT INTO draws (draw_date, first_number,

second_number, third_number, fourth_number, &quot +

@&quotfifth_number, sixth_number, bonus) VALUES (, , , ?, , , , )&quot)

cmdConnection = connection

IDbDataParameter paramDate = new SqlCeParameter () ,- paramDateParameterName = &quotSpDrawDate" paramDateDbType = SystemDataDbTypeDateTime

16 Зак 555

paramDateSize = 8 paramDateSourceColumn = &quotdraw_date" paramDateValue = DateTimeNow cmdParametersAdd(paramDate)

IDbDataParameter param = new SqlCeParameter() paramParameterName = &quot@pFirstNumber" paramDbType = SystemDataDbTypeInt32 paramSize = 4

paramSourceColumn = &quotfirst_number" paramValue = 1 cmdParametersAdd(param)

param = new SqlCeParameter() paramParameterName = &quot@pBonus" paramDbType = SystemDataDbTypeInt32 paramSize = 4

paramSourceColumn = &quotbonus" paramValue = 1

cmd Parameters Add (param) ,-

cmdExecuteNonQuery() connectionClose()

Щоб виконати команду, необхідно створити екземпляр iDbCommand, де паретром конструктора є оператор SQL, який необхідно виконати Оператор SQL виглядає дещо дивно, тому що він містить лапки Ці Кави є заповнювачами, які вважаються параметрами SQL Визначення параметрів SQL часто залежить від реалізації ADONET, але загальноприйнятим подх є застосування лапок Команда асоціюється з підключенням до бази даних За допомогою властивості cmdConnection

Незалежно від типу застосовуваного драйвера бази даних, кожен параметр має ТИП IDbDataParameter АБО IDataParameter З інтерфейсом м IDbDataParameter асоціюється специфічний для сервера SQL Server Compact Edition тип SqlCeParameter Якби ми використовували іншу базу даних, то тип, реалізуючи інтерфейс IDataParameter або IDbDataParameter, був би визначений Пругов, але реалізовував би той же самий інтерфейс

Інтерфейс IDbDataParameter має такі властивості:

• ParameterName – імя параметра має починатися символом

• DbType – тип параметра

• siz e – розмір параметра

• SourceColumn – стовпець для зберігання параметра Так як оператор INSERT не має іменованих параметрів, то це властивість використовується, щоб визна, куди помістити значення

• value – значення, яке зберігається в таблиці

ПРИМІТКА

Як правило, слід використовувати і маніпулювати стандартними інтерфейсами ADONET, а не типами, специфічними для драйвера ADONET

У прикладі показаний код, коли потрібно явно визначити атрибути кожного парамеа Таким чином, ми можемо бачити, що відбувається, коли параметри преобра і зберігаються в таблиці Спрощений варіант буде виглядати так:

IDbConnectio n    c o n n e c t i o n   =    ne w   SqlCeConnection (

D a t a b a s e C o n s o l e E x P r o p e r t i e s S e t t i n g s D e f a u l t l o t t e r y C o n n e c t i o n S t r i n g ) c o n n e c t i o n O p e n ( )

IDbComman d   cm d   =   ne w   SqlCeCommand (

@&quotINSER T   INT O   draw s     (draw_date ,     f i r s t _ n u m b e r , second_number ,     third_number /        fourth_number ,     &quot    +

@&quotfifth_number ,    sixth_number ,    bonus )    VALUE S    (@draw_date ,

@first_number ,     @second_number ,    @third_number, &quot    +

@&quot@fourth_number,@fifth_number,@sixth_number,(©bonus)&quot)         cmdConnectio n    =    c o n n e c t i o n

cmdParametersAdd(ne w    SqlCeParameter(&quotSpDrawDate&quot ,     DateTimeNow)) cmdParametersAdd(ne w    SqlCeParameter(&quotSpFirstNumber&quot ,      1 ) )

cmdParametersAdd(ne w    SqlCeParameter(&quotSpSecondNumber&quot ,      1 ) )

cmdParametersAdd(ne w    SqlCeParameter(&quotSpThirdNumber&quot ,      1 ) )

cmdParametersAdd(ne w    SqlCeParameter(&quotSpFourthNumber&quot ,      1 ) )

cmdParametersAdd(ne w    SqlCeParameter(&quotSpFifthNumber&quot ,      1 ) )

cmdParametersAdd(ne w    SqlCeParameter(&quotSpSixthNumber&quot ,      1 ) )

cmdParametersAdd(ne w    SqlCeParameter(&quotSpBonus&quot ,      1 ) )

Після того як параметри визначені і їм присвоєно значення, SQL-запит готовий до виконання Оператор SQL INSERT не вертає ніяких даних, т к дані посилаються від програми базі даних Тому необхідно виконати метод, який не очікує повернення даних Таким методом є метод

E x e c u t e N o n Q u e r y ( ) :

i n t    r e t v a l    =    cmdExecuteNonQuery()

C o n s o l e W r i t e L i n e ( &quot r e t v a l     ( &quot    +   r e t v a l    +    &quot ) &quot )

Тепер, коли наші таблиці містять дані, можна спробувати витягти ці дані Для цього призначений оператор SELECT Далі наводиться код для прмотра даних у таблиці draws:

IDbConnection connection = new SqlCeConnection( DatabaseConsoleExPropertiesSettingsDefaultlotteryConnectionString)

connectionOpen()

IDbCommand cmd = new SqlCeCommand*(@&quotSELECT * FROM draws&quot) cmdConnection = connection

IDataReader reader = cmdExecuteReader() while (readerRead()) {

ConsoleWriteLine(&quot(&quot + readerGetDateTime(O) + &quot) &quot +

readerGetlnt32(l) + ••&quot)

}

readerClose() connectionClose()

Для отримання даних відкривається підключення, створюється і виконується кома У прикладі оператор SELECT не має жодних параметрів, SELECT * Означає вибір всіх стовпців, але також можна визначити ідентифікатори для вибірки певних стовпців

У випадку з оператором SELECT сервер повертає дані Для читання возвращеих даних викликається метод ExecuteReader () Цей метод відрізняється від методу ExecuteNonQuery (), використовуваного для додавання даних, в основному тим, що він повертає екземпляр інтерфейсу IDataReader Інтерфейс IDataReader служить для обробки в циклі окремих записів, що надає нам можливість ілечь окремі поля записів

Для доступу до полів викликається відповідний метод Getromro, якому педалі індекс поля Який індекс використовувати, може бути неясно Індекс стветствующего поля повязаний з позицією стовпця в таблиці Наприклад, наступний код витягує четвертий стовпець з набору результатів, який має, по краей міру, чотири стовпці,

readerGetDouble(3)

Видалення даних з БД – майже така ж поширена операція, як і їх додавання Для видалення записів таблиці застосовується оператор SQL DELETE Наступний код видаляє певну запис з таблиці draws:

IDbCommand cmd = null

cmd = new SqlCeCommand(@&quotDELETE FROM draws WHERE draw_date= &quot, connection)

IDbDataParameter paramDate = new SqlCeParameter() paramDateParameterName = &quotSpDrawDate" paramDateDbType = SysternDataDbTypeDateTime paramDateSize = 8

paramDateSourceColumn = &quotdraw_date" paramDateValue = DateTimeNow cmdParametersAdd(paramDate)

cmdExecuteNonQuery() connectionClose()

Як і операторINSERT, ОператорDELETE не вертає даних і використовується

З методом ExecuteNonQuery *)

Після виконання SQL-операторів підключення до бази даних необхідно зрить, щоб вказати, що робота з базою даних завершена Підключення закралася допомогою наступного коду:

connectionClose()

Подивившись на весь код, представлений у цьому розділі, ви повинні помітити слующіе моменти, які стосуються прямого використання ADONET:

• застосовуються загальні інтерфейси, реалізовані конкретної бібліотекою

• всі драйвери ADONET реалізують інтерфейси iDbConnection і iDbCommand

• драйвер бази даних надає специфічні класи sqiCeConnection,

SqlCeCommand І SqlCeParameter

• ADONET не вимагає використання зумовлених фабрик Можна звернутися до фабриці за замовчуванням, але це не обовязково Можна також написати свою фабрику Програмісти, в гонитві за повним контролем, налаштовують код ініціалізації ADONET, щоб той підходив до їх установкам Але після ініалізаціі коду програмісти хочуть застосовувати загальні підходи і використовують інтерфейси

• код для роботи з базою даних передбачає відкриття підключення, опреленного команди SQL, такий як INSERT, DELETE І Т П, Присвоювання парамеов SQL, виконання команди SQL і закриття підключення

ПРИМІТКА

Для отримання додаткової інформації про SQL см сторінку Вікіпедії по SQL (http://enwikipediaorg/wiki/SQL) і навчальний посібник з SQL школи W3School (http://wwww3schoolscom/sql/defaultasp) Ці джерела надають гарне пояснення основ SQL Ще одним вартим уваги джерелом інформації з SQL є документація MSDN

Тепер розглянемо інший інструмент Visual Studio Для роботи з додатками баз даних

Допоміжне додаток Dataset Designer призначено для полегшення нісані додатків баз даних У MSDN є докладний навчальний посібник по створенню клієнтських додатків баз даних (http://msdn2microsoftcom/en- us/Iibrary/h0y4a0f6(VS80)aspx), Посібник описує, як вибирати опції і іользовать майстрів, але не дає пояснення деяких основоположних прііпов Ми застосуємо Dataset Designer для установки відносин між таблицями додатка лотереї і розглянемо код, який генерується автоматично для створення цих відносин

Джерело: Гросс К С # 2008: Пер з англ – СПб: БХВ-Петербург, 2009 – 576 е: ил – (Самовчитель)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*