|
https://technet.microsoft.com/en-us/library/ms143221(v=sql.105).aspx |
Работа с базами данных (продолжение). Элементы-источники данных (Data Source Controls)
Объектная модель источников данных
"Прежде всего нужны факты, а уж потом можно делать с ними, что хочешь". Марк Твен
Для работы с данными в ASP.NET существуют две группы специальных элементов управления. Первая предназначена для того, чтобы осуществлять связь с источниками данных. Вторая группа служит для отображения данных.
В Visual Studio .NET 2002 и 2003 можно было создавать привязки данных к странице по технологии "drag-and-drop". Эта технология была удобна тем, что упрощала написание кода, но вместе с тем она усложняла его модификацию. Объекты данных DataAdapter и DataConnection напрямую связывались формой Visual Studio 2005. Сейчас это тоже возможно, но технология изменилась. Введена новая объектная модель источников данных. Классы-источники данных обеспечивают лучшую абстрактизацию, чем использование классов ADO.
Один из компонентов этой модели — строка соединения с источником данных. В Visual Studio 2005 все строки добавляются в конфигурационный файл web.config:
<configuration> <appSettings/> <connectionStrings> <add name="DemoBaseConnectionString1" connectionString="Data Source= \SQLEXPRESS;Initial Catalog=DemoBase;Integrated Security=True" providerName="System.Data.SqlClient" /> <add name="DatabaseConnectionString1" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename="C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\QuickStart\aspnet\sam- ples\data\App_Data\Database.mdf";Integrated Security=True;Connect Timeout=30;User Instance=True" providerName="System.Data.SqlClient" /> </connectionStrings>
Разные страницы могут использовать одну и ту же строку соединения. Если по какой-либо причине соединение нужно будет изменить, например, если сервер изменил свое местоположение, изменения придется вводить централизованно в файле web.config.
Окно Data WebMatrix позволяет соединяться только с базами Access и SQL Server. Также работает перетаскивание, но требуется, чтобы в таблице имелся первичный ключ. Он не поддерживает и представлений ( View ) Access.
В WebMatrix существуют собственные элементы управления с префиксом wmx — AccessDataSourceControl и SqlDataSourceControl. Строка соединения записывается в свойство ConnectionString такого элемента управления. Программа WebMatrix служила испытательным полигоном для тех новых возможностей, которые позже были добавлены в Visual Studio .NET 2005:
<wmx:AccessDataSourceControl id="AccessDataSourceControl1"
runat="server" ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;
Ole DB Services=-4; Data Source=D:\My_DOCs\guestbook.mdb"
SelectCommand="SELECT * FROM
[guestbook]"></wmx:AccessDataSourceControl>
<wmx:SqlDataSourceControl id="SqlDataSourceControl1"
runat="server" ConnectionString="server='SQLEXPRESS';
trusted_connection=true; database='Northwind'"
SelectCommand="SELECT * FROM [Categories]" DeleteCommand=""
UpdateCommand=""></wmx:SqlDataSourceControl>Итак, строка соединения состоит из указания провайдера, если это Oledb, сервера и базы на этом сервере. База может находиться в отдельном файле с расширением .mdf. При соединении через ODBC указывается имя источника данных, тип базы, путь к файлу и драйвер:
<add name="ConnectionString1" connectionString="DSN=BB;DBQ=D:\Programming\Brain- bench\brainbench.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;" providerName="System.Data.Odbc" />
Строки могут показаться сложными, но они создаются, когда мы просто перетаскиваем на форму в Design mode таблицу или запрос. При наличии опыта можно писать их и самим.
Строками соединений можно манипулировать и программно:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
// Создание класса ConnectionStringSettings
ConnectionStringSettings conn = new ConnectionStringSettings();
conn.ConnectionString = "Server=localhost; " +
"User ID=sa;Password=m1d2ffnkl; " +
"Database=Northwind;Persist Security Info=True";
conn.Name = "Northwind ConnectionString";
conn.ProviderName = "System.Data.SqlClient";
//Добавление строки в файл web.config
ConfigurationManager.ConnectionStrings.Add(conn);
}
}Элементы-источники данных (Data Source Controls)
Эти элементы облегчают работу с ADO .NET, инкапсулируя работу с соединениями, командами и адаптерами. Они реализуют интерфейс IDataSource, в котором определен базовый набор возможностей работы с источниками данных. Большинство этих классов предоставляют функциональность для чтения и записи. Они являются обертками объектов ADO .NET. В предыдущих версиях надо было создавать объекты ADO самим и связывать элементы-управления с ними посредством команды DataBind. Например:
<asp:BulletedList ID="BulletedList1" runat="server"
BulletStyle="Square" DataTextField="CategoryName"
DataValueField="CategoryID">
</asp:BulletedList>
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(@"Data
Source=(local)\sqlexpress;Initial Catalog=Northwind;Integrated
Security=True");
SqlCommand cmd = new SqlCommand("SELECT CategoryID,
CategoryName FROM Categories", conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
BulletedList1.DataSource = ds;
BulletedList1.DataBind();
}Теперь элементы управления связываются c элементом-источником посредством свойства DataSourceID. Любой класс-источник данных может быть связан почти с любым классом для отображения данных, и это предоставляет большую гибкость.
Всего в ASP .NET 5 элементов-источников данных: SqlDataSource, AccessDataSource и ObjectDataSource для работы с табличными источниками данных и XmlDataSource и SiteMapDataSource — для работы с иерархическими данными.
SqlDataSource позволяет соединяться с большинством реляционных СУБД. Sql в названии класса означает, что служит для соединения с базами, которые понимают язык запросов Sql, а не только с MS SQL Server.
AccessDataSource оптимизирован для работы с базами Access. Например:
<asp:AccessDataSource ID="AccessDataSource1" runat="server"
DataFile="~/App_Data/guestbook.mdb"
SelectCommand="SELECT [WriteDate], [UserName], [UserMail],
[Message] FROM [guestbook]">
</asp:AccessDataSource>SiteMapDataSource — это специализация XmlDataSource, работает с файлами навигации по сайту и служит источником данных для элементов управления навигации.
ObjectDataSource нужен для соединения с написанными программистом бизнес-объектами.
Элементы-источники данных предназначены для двустороннего обмена данными, то есть как для чтения, так и для записи. Сами по себе они ничего не отображают. Данные будут доступны подключенным к ним элементам управления.