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 нужен для соединения с написанными программистом бизнес-объектами.
Элементы-источники данных предназначены для двустороннего обмена данными, то есть как для чтения, так и для записи. Сами по себе они ничего не отображают. Данные будут доступны подключенным к ним элементам управления.