ADO.NET: Обзор технологии
Страница 3. Практическое применение ADO.NET


 

Практическое применение 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]GOif 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"> 
protected void Page_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"> Вывод результатов выборки на экран</font></h3> 
<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 = newFileStream(
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> <font face= "Verdana">Данные из 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 как основную технологию доступа данным в веб приложениях.

 
« Предыдущая статья   Следующая статья »