Огляд технології, ADO.NET, ASP, статті




Введення.


Багато програмістів, що працюють з базами даних на платформах Microsoft, могли оцінити простоту і зручність технології ADO – ActiveX Data Objects. Інтутітівно-зрозумілий інтерфейс і логічний набір об’єктів разом з простотою програмування заслужено отримали визнання програмістів. Незважаючи на це, разом з новою платформою. NET Microsoft представляє і нове покоління засобів доступу до баз даних – ADO.NET. Cтремітельное розвиток веб додатків викликало необхідність переглянути методи роботи з джерелами даних, краще адаптувати їх до специфіки додатків. Непередбачуваний зростання числа клієнтів Інтернет сайтів змушує розробників переходити від кліентсерверной до three-tier архітектури, що часто породжує непереборні проблеми. Бази даних не здатні підтримувати необмежене число активних сполук, обмежуючи доступність сайту і приносячи збитки. Брандмауери можуть перешкоджати передачі двійкових даних між вузлами. ADO.NET покликане вирішити ці та інші проблеми і разом з тим зберегти зручність і простоту програмування.


Переваги і нововведення в ADO.NET


Використання роз’єднаною моделі доступу до даних.


В клієнт-серверних додатках традиційно використовується технологія доступу до джерела даних при якій з’єднання з базою підтримується постійно. Однак після широкого розповсюдження додатків, орієнтованих на Інтернет, виявилися деякі недоліки такого підходу. Спробуємо виявити деякі з них.


З’єднання з базою даних вимагають виділення системних ресурсів, що може бути критично при великому навантаженні сервера. Хоча постійне з’єднання дозволяє дещо прискорити роботу програми, загальний збиток від розтрати системних ресурсів зводить перевагу нанівець.


Специфіка веб додатків не дозволяє серверу в кожен момент часу знати, що необхідно користувачу. Тобто до наступного запиту сервер не має уявлення, чи потрібно ще підтримувати з’єднання.


Досвід розробників показав, що додатки з постійним з’єднанням з джерелом даних надзвичайно важко піддаються масштабуванню.


Хоча існують і інші недоліки, наведені, на мій погляд, найбільш істотні і найімовірніше зустрічалися читачеві. Всі ці проблеми породжуються постійним з’єднанням з базою даних і вирішуються в ADO.NET, де використовується інша модель доступу. Тепер з’єднання встановлюється лише на той короткий час, коли необхідно проводити операції над базою даних.


Слід визнати, що нова технологія іноді все ж програє традиційною. Для цих випадків рекомендовано (не тільки мною, а й Microsoft) використовувати ADO. Прикладами таких програм є програми провідні часті і об’ємні зміни змісту записів – замовлення квитків, наприклад (докладніше про причини непридатності роз’єднаною моделі в цьому випадку див. наступний розділ).


Зберігання даних в об’єктах DataSet.


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


DataSet являє собою, по суті, спрощену реляційну базу даних і може виконувати найбільш типові для таких баз даних операції. Тепер, в відміну від Recordset ми можемо зберігати в одному DataSet відразу кілька таблиць, зв’язку між ними, виконувати операції вибірки, видалення і оновлення даних. Безумовно, роз’єднана модель не дозволяє постійно відстежувати зміни в базі даних, вироблені іншими користувачами. Це може привести до помилок в таких додатках, де інформація повинна оновлюватися кожен момент – замовлення квитків або продаж цінних паперів. Проте в будь-яку секунду може бути отримана свіжа інформація з бази даних через виклик методу FillDataSet. Таким чином, DataSet залишається надзвичайно зручним для самого широкого класу додатків: коли необхідно отримати дані з бази і як-небудь обробити їх.


Детальніше DataSet і його програмування ми розглянемо в розділі статті, присвяченому практичному застосуванню ADO.NET.


Глибока інтеграція з XML.


Все більш широко поширюється XML грає найважливішу роль в ADO.NET і приносить ще декілька переваг в порівнянні з традиційним підходом.


Зауважимо для початку, що практично будь XML файл може бути використаний як джерело даних і на його основі може бути створений DataSet. точно також при передачі даних між компонентами або збереженні їх у файл використовується
XML.


Програміст, що працює з ADO.NET не обов’язково повинен мати досвід роботи з XML або пізнання в цій мові. Всі операції залишаються прозорими для розробника.


Так як XML має текстове уявлення, це дозволяє передавати його по протоколам типу HTTP через брандмауери. Справа в тому, що системи захисту зазвичай налаштовані на фільтрацію двійкової інформації, текстова ж легко пропускається, що полегшує створення розподілених додатків.


XML це промисловий стандарт, підтримуваний практично будь-якої сучасної платформою, що дозволяє передавати дані будь-якого компоненту, вміє працювати з XML, і виконується під будь-якій операційній системою.


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


Практичне застосування ADO.NET


Введення.


Уміння застосувати на практиці теоретичні знання примножує їх ціну, тому ми присвячуємо прикладам роботи з ADO.NET окремий розділ, де розглянемо найбільш типові завдання, розбивши їх на окремі блоки: з’єднання з джерелом даних, вибірка, видалення та оновлення інформації, висновок вмісту на екран, робота з XML і т.д. В якості платформи для побудови інтерфейсу буде використана ASP.NET, а як мова програмування взято C #.


Managed Providers.


ADO.NET підтримує два типи джерел даних – SQL Managed Provider і ADO Managed Provider. SQL Managed Provider застосовується для роботи з Microsoft SQL Server 7.0 і вище, ADO Managed Provider – для всіх інших баз даних.


SQL Managed Provider – працює за спеціальним протоколом, що зветься TabularData Stream (TDS) і не використовує ні ADO, ні ODBC, ні яку-небудь ще технологію. Орієнтований спеціально на MS SQL Server, протокол дозволяє збільшити швидкість передачі даних і тим самим підвищити загальну продуктивність додатки.


ADO Managed Provider – призначений для роботи з довільною базою даних. Проте за рахунок універсальності є програш в порівнянні з SQL Server Provider, так що при роботі з SQL Server рекомендовано використовувати спеціалізовані класи. В даному огляді ми торкнемося ADO Managed Provider лише мигцем, вказавши тільки існуючі незначні відмінності, так як найбільш вживаної базою даних представляється SQL Server 7.0 або 2000, а різниця полягає, в основному, в іменуванні.


Для роботи з нашими прикладами вам знадобиться створити базу даних dotSITE і виконати наступні скрипти для створення структури і мінімального наповнення.





if exists (select * from sysobjects
where id = object_id(N”[dbo].[Articles]”) and OBJECTPROPERTY(id, N”IsUserTable”) = 1)
drop table [dbo].[Articles]
GO
if exists (select * from sysobjects
where id = object_id(N”[dbo].[Authors]”) and OBJECTPROPERTY(id, N”IsUserTable”) = 1)
drop table [dbo].[Authors]
GO
CREATE TABLE [dbo].[Articles] (
[Theme] [char] (50) NOT NULL ,
[Author] [int] NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Authors] (
[AuthorID] [int] IDENTITY (1, 1) NOT NULL ,
[Name] [char] (50) NULL ,
[SirName] [char] (50) NULL
) ON [PRIMARY]
GO
insert into Authors(Name,SirName) values (“Michael”,”Kondratiev”)
insert into Authors(Name,SirName) values (“Andrew”,”Filev”)
insert into Authors(Name,SirName) values (“Alex”,”Utkin”)
insert into Articles(AuthorID,Theme) values (1,”ASPNET Authentication”)
insert into Articles(AuthorID,Theme) values (2,”ASPNET Overview”)
insert into Articles(AuthorID,Theme) values (3,”Soap”)
Тепер, коли ми створили базу даних, можна переходити безпосередньо до прикладів. У всіх випадках, крім особливо обумовлених буде використовуватися SQL Managed Provider.


З’єднання з базою даних:


Щоб встановити з’єднання з нашейбазой даних слід виконати наступний код:




SQLConnectionmyConnection=newSQLConnection("server=localhost;uid=sa;pwd=;database
= dotSITE");
myConnection.Open();
Як видно, при використанні SQL Managed Provider не вказується DSN. Для роботи з довільною базою даних рядок з’єднання що показують як в ADO. У цьому випадку використовуються ADO орієнтовані класи: ADOConnection, ADOCommand, ADODataReaderі ін

Важливо! Не забудьте імпортувати відповідні простору імен в Залежно від використовуваного Managed Provider. У ASP.NET це буде виглядати:




<% "ДЛЯ ADO Managed Provider%>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.ADO" %>
<% "ДЛЯ SQL Managed Provider%>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SQL" %>

Вибірка, видалення і оновлення даних:


Для виконання операцій над базою даних використовується клас SQLConnection. При його створенні ми передаємо рядок, що містить SQL скрипт і ім’я з’єднання. В нашому випадку це буде:




ADOCommand myCommand = new ADOCommand("select * from Authors", myConnection);
Після цього, якщо це операція вибірки можна використовувати Dataset для передачі в нього даних:



DataSet ds = new DataSet();
myCommand.FillDataSet(ds, "Authors");
Якщо ж вироблялося видалення, оновлення або вставка, то використовується метод ExecuteNonQuery (). При цьому також потрібно відкрити, а після виконання дій закрити з’єднання. Наступний фрагмент коду іллюстріркет це:



myCommand.ActiveConnection.Open();
myCommand.ExecuteNonQuery();
myCommand.ActiveConnection.Close();
Тепер зберемо все це разом і продемонструємо приклад aspx сторінки, що виводить на екран вміст нашої бази даних. При цьому використовується серверний контрол DataGrid:



<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SQL"%>
<html>
<script language="C#"runat="server">
protectedvoidPage_Load(ObjectSrc,EventArgsE){
SQLConnectionmyConnection=newSQLConnection("server=localhost;uid=sa;pwd=;database=dotSITE");
SQLDataSetCommand myCommand = new SQLDataSetCommand("select * from Authors", myConnection);
DataSet ds = new DataSet();
myCommand.FillDataSet(ds, "Authors");
MyDataGrid.DataSource=ds.Tables["Authors"].DefaultView;
MyDataGrid.DataBind();
}
</script>
<body>
<h3>
<font face="Verdana"> Висновок результатів вибірки на екран
<ASP:DataGrid id="MyDataGrid" runat="server"
Width="700"
BackColor="red"
BorderColor="black"
ShowFooter="false"
CellPadding=3
CellSpacing="0"
Font-Name="Verdana"
Font-Size="8pt"
HeaderStyle-BackColor="green"
MaintainState="false"
/>
</body>
</html>
Останнє, що ще не було продемонстровано – заповнення DataSet з XML файлу:



<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Data" %>
<html>
<script language="C#" runat="server">
protected void Page_Load(Object Src, EventArgs E)
{
DataSet ds = new DataSet();
FileStream fstream = new
FileStream(Server.MapPath("XMLData.xml"),FileMode.Open,FileAccess.Read);
StreamReader STRreader = new StreamReader(fstream);
ds.ReadXml(STRreader);
fstream.Close();
DataView Source = new DataView(ds.Tables[0]);
MySpan.InnerHtml = Source.Table.TableName;
MyDataGrid.DataSource = Source;
MyDataGrid.DataBind();
}
</script>
<body>
<h3> Дані з XML:
<span runat="server" id="MySpan"/></font></h3>
<ASP:DataGrid id="MyDataGrid" runat="server"
Width="900"
BackColor="red"
BorderColor="black"
ShowFooter="false"
CellPadding=3
CellSpacing="0"
Font-Name="Verdana"
Font-Size="8pt"
HeaderStyle-BackColor="green"
MaintainState="false"
/>
</body>
</html>

Як видно, є невеликі відмінності від роботи з DataSet, заповнюваних з SQL БД, полягають в основному у використанні FileStreamObject. Однак, на мій погляд, текст достатньо прозорий і не потребує коментарів.


Підіб’ємо підсумок. ADO.NET представляє нову структуру об’єктів і нову модель доступу до даних, що дозволяє поліпшити продуктивність найбільш часто зустрічаються додатків. Це дає нам підстави пророкувати ADO.NET як основну технологію доступу даними в веб додатках.

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


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

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

Ваш отзыв

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

*

*