Огляд AD0.NET – ЧАСТИНА 7

SQL Native Client

У версіях SQL Server 2005 і ADONET 20 доступ до сервера баз даних вже не грунтується на MDAC Замість цього в одному файлі Dll міститься збірка, що отримала назву SQL Native Client Очікувалося, що ця збірка вирішить всі відомі проблеми узгодженості, повязані з розподіленим оновленням масивного набору файлів MDAC, а також підвищить захищеність за рахунок скорочення кількості доступних інтерфейсів Власні протоколи компанії Microsoft доступу з NET в SQL Server, так само як і інтерфейси OLE DB, ODBC і власні інтерфейси SQL Server, також були включені в цю збірку

Було б ідеально, якби для доступу до SQL Server була потрібна тільки складання SQL Native Client На жаль, ідеал так і залишився недосяжним SQL Native Client підтримує тільки SQL Server 70 і більше пізні версії продукту SQLXML не інтегрована в SQL Native Client З великою ймовірністю безлічі додатків доведеться зберегти залежність як від MDAC, так і від SQL Native Client Зрештою, одним з основних переваг платформи NET є доступ до гетерогенним джерел даних Монолітний SQL Native Client здатний спростити обслуговування та забезпечення безпеки містяться в ньому інтерфейсів, однак він так і не вніс істотного зрушення в способі взаємодії додатків з SQL Server Аналогічно, найімовірніше, що доступ за допомогою ODBC, OLE DB і, в деякій мірі, ADO так і залишиться проблематичним, оскільки розширення SQL Native Client передбачає залежність від компонентів MDAC

Додаткова У SQL Server 2005 інтерфейс SQLXML був оновлений до версії 40 Незважаючи інформація на те що він не інтегрований в постачальник SQL Native Client, SQLXML підтри- живається середовищем NET Framework допомогою постачальника SQLXMLOLEDB, заснованого на інтерфейсі OLE DB Додаткову інформацію про SQLXML і використанні його в програмуванні NET ви знайдете в главі 31

Типи даних

ADONET використовує XML для переміщення інформації з бази даних в додаток Не слід плутати цей транспортний механізм з типом даних XML, оскільки він дозволяє доставляти будь-які дані SQL, подібно тому, як TDS є основним механізмом транспортування двійкових даних з SQL Server XML може підтримувати всі типи даних, оскільки є потоком бітів На противагу цьому додатки Visual Studio покладаються на керовані типи даних для представлення інформації на екрані Іншими словами, XML привніс у додатки додатковий рівень перетворень ADONET переміщує інформацію між базою даних і додатками в потоках XML Після цього потік XML потрібно розпакувати, щоб представити реляційні дані додатку в потрібному форматі Всі обмеження даних і проблеми, розглянуті в розділах, присвячених ADO, також застосовні і до даних, що поставляється в програму за допомогою ADONET Таким чином, на етапі розробки слід приділити особливу увагу таким питанням, як втрата даних і проблеми сумісності

На щастя, керована середовище забезпечує надійне управління типами даних, що використовуються в СУБД Використання ADONET може дещо знизити загальну продуктивність транспортування даних, оскільки використання потоку XML вимагає операцій упаковки і розпаковування Водночас малоймовірно, щоб у керованому середовищі програміст зіткнувся з жодними проблемами перетворення даних Очікується, що в найближчому майбутньому продуктивність операцій введення-виведення, що використовують потоки XML, стане не гірше продуктивності передачі двійкових даних, використовуваної в ADO Це відразу ж допоможе приборкати розростання помилок перетворення типів даних під час виконання програми

Однією з особливо важливих причин, чому варто віддати перевагу ADONET, а не ADO, є те, що ADONET краще підтримує нові типи даних SQL Server, такі як XML, varchar (шах), varbinary (шах), а також всі користувальницькі типи CLR

Додаткова Повну схему відображення типів даних SQL Server 2005 і середовища NET Frame-інформація work см в табл 271 глави 27

Тип даних XML в SQL Server 2005 не слід плутати з потоками XML, використовуваними ADONET для транспортування даних Тип даних XML підтримується типом даних SystemDataSqlTypesSqlXml в ADONET20 Тип даних XML можна використовувати для зберігання документів XML та їх фрагментів ADONET 20 підтримує читання цього типу даних за допомогою методу XMLDataReader На відміну від інших типів даних SQL Server 2005, тип XML перевіряється на рівні SQL Server, а не на рівні ADONET Це означає, що дані з типом XML несуть із собою ризик генерації помилок при використанні методу поновлення обєкта DataAdapter (тобто коли дані повертаються в базу), які неможливі при використанні інших примітивних типів даних SQLXML 40 пропонує потужну підтримку типу XML на стороні клієнта, включаючи власний набір компонентів доступу до даних Нагадаю, що SQLXML 40 не реалізований у складі ADONET 20

Користувача типи даних CLR заслуговують особливої ​​уваги Для використання цих типів в програмному коді NET структурно цілісні версії відповідних збірок повинні існувати як на сервері баз даних, так і на серверах додатків Ця вимога обмежує гнучкість рішень Зовсім не обовязково, щоб суворі імена збірок на серверах баз даних і додатків збігалися, – головне, щоб структура типу на всіх цих серверах була визначена однаково У цій вимозі є певний сенс Системні примітивні типи даних, такі як int, char або bit, повинні існувати на всіх серверах Різниця укладено в логістиці, необхідної для підтримки синхронізації додаткових властивостей користувача типів на всіх рівнях, на противагу щодо статичним примітивним типам Користувальницькі типи, використовувані тільки на сервері баз даних, на практиці навряд чи матимуть особливу цінність, а для користувача типи, розгорнуті у виробничому середовищі, швидше за все, будуть крихкими завдяки своїм незручним вимогам При використанні для користувача типів в додатках ADONET 20 необхідно ретельне планування розгортання

Додаткова Розгорнуту дискусію з питань створення і розгортання користувач-інформація ських типів ви знайдете в главі 29

Адаптери даних і набори даних

До теперішнього моменту ми розглядали технології ADO і ADONET як абсолютно різні, незважаючи на схожість імен і загальне призначення Ядром моделі ADO є клас набору записів Recordset Для модифікації даних за допомогою цього набору записів необхідно використовувати або програмний інтерфейс серверного курсора, який залишається в базі даних, або відправляти оновлення в базу даних, як тільки вони сталися в наборі даних Обидва методи довели свою неспроможність внаслідок наявності питань конкуренції до того ж обидва методи вимагають великого обсягу програмного коду Щоб працювати з безліччю наборів записів Recordset, необхідно створювати безліч підключень і жонглювати цими наборами в програмному коді або організовувати кілька наборів записів з бази даних в колекцію і працювати з ними по черзі Кожен з методів довів свою жорсткість і вимагає великих ланцюжків часто повторюваного програмного коду

Основний метод зберігання даних в памяті в ADONET реалізований за допомогою класу набору даних DataSet Обєкт DataAdapter використовується для звязування джерела даних і його образу в памяті У ADONET 20 клас DataSet став набагато могутніше, ніж коли б то не було раніше

Обєкти DataSet відключені від бази даних, що дозволяє зменшити навантаження на базу і спростити масштабування додатків Програмі потрібно або наповнювати обєкт DataSet з бази даних, або оновлювати базу даних з цього обєкта

Обєкт DataAdapter наповнює обєкт DataSet з потоку даних, що йде з бази Також він обробляє вставки, оновлення та видалення, які повинні бути поширені на базу даних

Запити DataSet можуть посилатися на безліч обєктів таблиць DataTable, що містяться в обєкті DataSet, при цьому підтримка існуючих відносин і типів даних відбувається непомітно, коли дані модифікуються в обєкті DataSet

Оптимізація індексів в ADONET 20 істотно збільшила розміри кеша обєкта DataSet, при цьому істотно підвищивши швидкодію в порівнянні з ADONET Ijc Обєкт DataSet, що наповнюється відносно невеликим обсягом даних, не дасть відчути ефект від оптимізації індексів У міру розростання обєкта DataSet ефект оптимізації стане більш явним

Пакет Visual Studio 2005 добре інтегрований з класами ADONET 20 Техно-Назаметку логія ADONET вже стала значно простіше у використанні Безліч засобів інтерфейсу користувача Visual Studio ще в більшій мірі спростили використання ADONET в додатках Наприклад, DataSet може бути повязаний з елементом управління методом перетягування цього елемента з панелі інструментів на обєкт елемента управління До того ж на етапі розробки можна скористатися послугами майстрів обєктів DataAdapter і DataSet, які дозволяють автоматично створювати набори даних і програмний код для їх наповнення

Метод CommandBuild дозволяє автоматично створювати команди оновлення, вставки і видалення, які буде використовувати обєкт DataAdapter для роботи з базою даних, на основі інструкції SELECT, використаної для заповнення обєкта DataSet Один рядок програмного коду допоможе згенерувати три операції над базою даних

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

За замовчуванням клас DataReader використовує односторонній послідовний курсор Цей обєкт пропонує роботу як в підключеному, так і у відключеному режимі Користувач може завантажити дані з бази компанії, використовуючи доступне підключення (у тому числі і через Інтернет) Після цього у відключеному режимі дані будуть доступні для перегляду (але не для безпосередньої модифікації, оскільки звязок з базою даних була втрачена) У той час як користувача може більшою мірою зацікавити використання відокремленого обєкта DataReader, ADONET 20 додатково пропонує методи перетворення обєкта таблиці DataTable в DataReader за допомогою методу GetTableReader, а також наповнення обєкта DataTable з обєкта DataReader або підключеного до бази даних обєкта DataAdapter Підвищена гнучкість і скорочення обсягу програмного коду, супроводжуючі це удосконалення класу DataTable, є додатковими причинами, за якими краще використовувати модель ADONET, ніж ADO

Одним з недоліків програмного створення набору даних DataSet з обєкта DataReader є те, що в такому випадку DataSet не може бути типізований Перевагою типизированного набору даних є можливість домогтися більшої продуктивності, так як не включаються додаткові рівні явного перетворення даних або більш складні перетворення, крім тих, які необхідні в NET Ще одним гідністю є підвищення читаності програмного коду Наприклад, для виявлення і використання стовпця обєкта DataTable нетипізованого набору даних DataSet може використовуватися наступний програмний код:

City = dsOrderTables [n] Rows [л] ItemArrayGetValue (1) ToSTringO

Використовуючи типізований обєкт DataSet моделі ADONET, програмний код можна зробити більш дружнім:

City = dsOrderInvoice[0]Name

Як ми бачимо, посилання на типізовані обєкти DataSet більш короткі

У той же час обєкти Recordset моделі ADO вимагають меншого обсягу програмного коду для доступу до окремих значень Крім того, при використанні обєкта Recordset до полів можна звертатися по імені, в той час як DataSet або відокремлений обєкт DataTable вимагає вказівки індексу, заснованого на порядковому номері значення в результуючому наборі даних Використання ADONET пропонує й інші істотні переваги, які можна відразу не помітити, якщо дозволити упередженню, що все одно ADO краще, затьмарити загальну картину

Модель ADONET 20 також пропонує використання множинного активного результуючого набору даних (MARS), доступного тільки для роботи з SQL Server 2005 MARS можна собі уявити як механізм створення пулу сесій, подібно механізму створення пулу підключень в технології ADO Так як існує маса причин створення безлічі підключень, в деяких випадках (наприклад, коли декілька запитів повинні підтримувати цілісність транзакції) MARS може забезпечити цілісність транзакцій і підвищити продуктивність без необхідності поділу транзакції на два етапи, що використовують різні підключення Якщо в постачальнику даних включена підтримка MARS, то інструкції відбору даних можуть чергуватися відповідно до вимог поставленого завдання В операціях вставки, оновлення та видалення, виконуваних з включеною підтримкою MARS, відбувається сериализация інструкцій DML та відбору даних За умовчанням в SQL Server 2005 відключена підтримка MARS Щоб її включити, досить задати в рядку підключення параметр MultipleActiveResultSets = true

Навіть незважаючи на те, що MARS за замовчуванням відключений, для його підтримки На замітку всі підключення піддаються додатковому навантаженню Компанія Microsoft заявляє, що установка параметра MultipleActiveResultSets в значення false не виключає це навантаження Мабуть, єдиною підставою відключення підтримки MARS є необхідність генерування стану помилки, коли в одному підключенні відправляється більше одного запиту

Модель ADO не реалізує функції віддаленого підключення Але, подібно всім іншим технологіям, заснованим на СОМ, вона використовує обєктну модель розподілених компонентів DCOM як основу обміну даними у віддалених мережах Це означає, що номер порту підключення часто змінюється і що самі дані мають двійкову форму Перевагою цього підходу є те, що тільки трохи зломщиків мають знання, необхідні для перегляду даних (зрозуміло, якщо вони після виявлення даних зможуть їх дешифрувати) Недоліками є неможливість використання деяких специфічних для ADONET функцій, високі технічні витрати на передачу двійкових даних і неможливість проходження через брандмауери Web-cepeepa Добре сконфігурований брандмауер закриває порти і обмежує проходження двійкових даних

. Простіше кажучи, DCOM – це технологія СОМ, в якій компоненти можуть У взаємодіяти по мережі У DCOM компоненти для взаємодії викорис-^ V / ХСеті зуют технологію віддаленого виклику процедур (RPC) На практиці захист і ін-^ теграція зі стеком мережевих протоколів віддаляють технологію DCOM від СОМ,

незважаючи на те, що вони мають подібне призначення Читачам, яким цікаво детально ознайомитися з технологією DCOM, я б порадив прочитати статтю DCOM Technical Overview, опубліковану в 1996 році на сайті бібліотеки MSDN:

http://msdnmicrosoftcom/library/defaultaspurl=/library/en-us/ dndcom/html/msdn_dcomtecasp

ADONET обходить брандмауери, використовуючи для передачі даних формат XML і деякий протокол передачі даних, наприклад протокол передачі гіпертексту HTTP Дані передаються у форматі ASCII, використовуючи при цьому один порт В арсеналі розробника існує безліч і інших засобів, які дозволяють додатково захистити проходження потоку XML по кабелю, таких як шифрування SSL, цифровий підпис, обмін сертифікатами і самодостатній протокол Web Services Security Вони можуть виявитися корисними в умовах, коли передача тексту по кабелю є неприпустимою з міркувань захисту даних

У ADONET 20 міститься також маса та інших поліпшень Розробнику буде доцільно приділити увагу перевірці того, чи дійсно реальне поведінка відповідає очікуваному Деякі поліпшення повязані з новими функціями SQL Server 2005, і їм буде приділено увагу в цій книзі Деякі з найбільш цікавих покращень, повязаних з платформою NET, наведені нижче

■ Автоматична ескалація транзакцій з локальних в розподілені, коли в них задіяно безліч джерел даних

■ Покращена індексація обєкта DataTable, що може призвести до підвищення продуктивності роботи з великими масивами даних

■ Оновлення з наборів даних DataSet можуть бути відправлені в базу даних пакетами Для цього властивість UpdateBatchSize адаптера даних SQLDataAdapter слід встановити в значення більше нуля

■ Покращений пошук доступних джерел даних Наприклад, обєкт SqlClient призначений для пошуку всіх доступних примірників SQL Server в локальній мережі

■ Покращене керування пулом підключень, у тому числі можливість установки обмежень на кількість підключень та очищення пулу від усіх існуючих підключень

■ Програмний інтерфейс масової вставки, заснований на ADONET 20, дозволяє швидко перемістити великі обсяги даних з обєктів DataTable і DataReader

■ ADONET 20 може служити джерелом даних для пакетів служби інтеграції

■ Метод повідомлень, використовуваний для інформування процесів середнього рівня про зміну даних у базі Це ще раз підкреслює достоїнства багаторівневої архітектури, де набори даних кешируются, а вихідні дані швидко змінюються Обєкт SqlDependency повязаний з обєктом Sql Command Після цього додаток за допомогою методу SQLNotif icationRequest опитує чергу брокера служб на предмет наявності повідомлень про оновлення даних

■ Можливість асинхронного виконання Здатність створювати нові робочі потоки, одночасно продовжуючи обробку в основному потоці, не є новою, за винятком можливості перерахування та керування асинхронними робочими потоками Повязані методи запитів тепер підтримують типову програмну структуру NET begin end для асинхронних операцій (наприклад, BeginExecuteNonQuery .. EndExecuteNonQuery) Слід звернути увагу, що WinForms не підтримує асинхронні черги ADONET 20 Асинхронне виконання за замовчуванням вимкнено Для його включення в рядку підключення потрібно встановити параметр AsynchronousProcessing = true

■ Метрика продуктивності SQL Server представлена ​​в інтерфейсі програмування як властивість підключення

Додаткова Чотири важливих розширення ADONET можуть бути використані в серверному

інформація коді CLR: SqlContext, SqlPipe, SqlTriggerContext і SqlDataRecord Всі вони детально описані в главі 27

Джерело: Нільсен, Пол Microsoft SQL Server 2005 Біблія користувача : Пер з англ – М: ООО ІД Вільямс , 2008 – 1232 с : Ил – Парал тит англ

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


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

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

Ваш отзыв

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

*

*