Привязка к базам данных

Обновлен: Ноябрь 2007

Обычно веб-приложения отображают данные из реляционных баз данных, таких как Microsoft SQL Server, Microsoft Access, Oracle и хранилище данных OLEDB или ODBC. Для упрощения задачи привязки элемента управления к данным из базы данных ASP.NET предоставляет элементы управления LinqDataSource и SqlDataSource.

Элемент управления LinqDataSource

Элемент управления LinqDataSource разрешает использовать LINQ на веб-странице ASP.NET в декларативной разметке для извлечения и изменения данных из объекта данных. Этот элемент управления поддерживает автоматическое создание команд выборки, удаления, вставки и обновления. Он также поддерживает сортировку, фильтрацию и разбиение по страницам.

При использовании элемента управления LinqDataSource для взаимодействия с данными из базы данных подключение элемента управления LinqDataSource непосредственно к базе данных не выполняется. Вместо этого он взаимодействует с классами сущностей, представляющими базу данных и таблицы. Классы сущностей можно создать с помощью Сред. Объектно-реляционный конструктор выполнив служебную программу SqlMetal.exe. Дополнительные сведения см. в разделах Реляционный конструктор объектов и Средство создания кода (SqlMetal.exe).

Как правило, создаваемые классы сущностей находятся в папке App_Code веб-приложения. Сред. Объектно-реляционный конструктор или программа SqlMetal.exe создает один класс, представляющий базу данных и по одному классу для каждой таблицы в базе данных.

Элемент управления LinqDataSource подключается к классу базы данных путем присвоения свойству ContextTypeName имени класса, представляющего базу данных. Элемент LinqDataSource подключается к конкретной таблице путем присвоения свойству TableName имени класса, который представляет таблицу. Например чтобы подключиться к таблице Contacts в базе данных AdventureWorks, следует задать в качестве значения свойства ContextTypeName имя класса, такое как AdventureWorksDataContext (или любое имя, указанное для объекта базы данных). Для свойства TableName устанавливается значение Contacts.

В следующем примере показано создание элемента управления LinqDataSource, получающего данные из таблицы с именем Products. Этот элемент управления автоматически создает команды для поддержки выборки, обновления, вставки и удаления данных. Элемент управления DetailsView отображает данные и создает кнопки, с помощью которых пользователи смогут обновлять записи.

<asp:LinqDataSource 
    ContextTypeName="ExampleDataContext" 
    TableName="Products" 
    EnableUpdate="true"
    EnableInsert="true"
    EnableDelete="true"
    ID="LinqDataSource1" 
    runat="server">
</asp:LinqDataSource>
<asp:DetailsView 
    DataKeyNames="ProductID"
    AutoGenerateEditButton="true"
    AutoGenerateDeleteButton="true"
    AutoGenerateInsertButton="true"
    AllowPaging="true"
    DataSourceID="LinqDataSource1"
    ID="GridView1" 
    runat="server">
</asp:DetailsView>
<asp:LinqDataSource 
    ContextTypeName="ExampleDataContext" 
    TableName="Products" 
    EnableUpdate="true"
    EnableInsert="true"
    EnableDelete="true"
    ID="LinqDataSource1" 
    runat="server">
</asp:LinqDataSource>
<asp:DetailsView 
    DataKeyNames="ProductID"
    AutoGenerateEditButton="true"
    AutoGenerateDeleteButton="true"
    AutoGenerateInsertButton="true"
    AllowPaging="true"
    DataSourceID="LinqDataSource1"
    ID="GridView1" 
    runat="server">
</asp:DetailsView>

Дополнительные сведения см. в разделе Общие сведения о серверном веб-элементе управления LinqDataSource.

Элемент управления SqlDataSource

Элемент управления SqlDataSource предоставляет для веб приложения прямое подключение к базе данных. Элементы управления привязки к данным, например GridView, DetailsView и FormView, могут использовать элемент управления SqlDataSource для автоматического извлечения и изменения данных. Команды для выборки, обновления, вставки и удаления данных задаются как часть элемента управления SqlDataSource, и он выполняет эти операции автоматически. Нет необходимости писать код (например код ADO.NET, использующий классы в пространстве имен System.Data), чтобы создать подключение и задать команды для выполнения запросов и обновлений в базе данных.

В следующем примере кода показан элемент управления GridView, привязанный к элементу управления SqlDataSource для извлечения, обновления и удаления данных.

<%@ Page language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>GridView Edit Example</title>
</head>
<body>
    <form id="form1" runat="server">

      <h3>GridView Edit Example</h3>

      <!-- The GridView control automatically sets the columns     -->
      <!-- specified in the datakeynames property as read-only.    -->
      <!-- No input controls are rendered for these columns in     -->
      <!-- edit mode.                                              -->
      <asp:gridview id="CustomersGridView" 
        datasourceid="CustomersSqlDataSource" 
        autogeneratecolumns="true"
        autogeneratedeletebutton="true"
        autogenerateeditbutton="true"
        datakeynames="CustomerID"  
        runat="server">
      </asp:gridview>

      <!-- This example uses Microsoft SQL Server and connects  -->
      <!-- to the Northwind sample database. Use an ASP.NET     -->
      <!-- expression to retrieve the connection string value   -->
      <!-- from the Web.config file.                            -->
      <asp:sqldatasource id="CustomersSqlDataSource"  
        selectcommand="Select [CustomerID], [CompanyName], [Address], [City], [PostalCode], [Country] From [Customers]"
        updatecommand="Update Customers SET CompanyName=@CompanyName, Address=@Address, City=@City, PostalCode=@PostalCode, Country=@Country WHERE (CustomerID = @CustomerID)"
        deletecommand="Delete from Customers where CustomerID = @CustomerID"
        connectionstring="<%$ ConnectionStrings:NorthWindConnectionString%>"
        runat="server">
      </asp:sqldatasource>

    </form>
  </body>
</html>

<%@ Page language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>GridView Edit Example</title>
</head>
<body>
    <form id="form1" runat="server">

      <h3>GridView Edit Example</h3>

      <!-- The GridView control automatically sets the columns     -->
      <!-- specified in the datakeynames property as read-only.    -->
      <!-- No input controls are rendered for these columns in     -->
      <!-- edit mode.                                              -->
      <asp:gridview id="CustomersGridView" 
        datasourceid="CustomersSqlDataSource" 
        autogeneratecolumns="true"
        autogeneratedeletebutton="true"
        autogenerateeditbutton="true"
        datakeynames="CustomerID"  
        runat="server">
      </asp:gridview>

      <!-- This example uses Microsoft SQL Server and connects  -->
      <!-- to the Northwind sample database. Use an ASP.NET     -->
      <!-- expression to retrieve the connection string value   -->
      <!-- from the Web.config file.                            -->
      <asp:sqldatasource id="CustomersSqlDataSource"  
        selectcommand="Select [CustomerID], [CompanyName], [Address], [City], [PostalCode], [Country] From [Customers]"
        updatecommand="Update Customers SET CompanyName=@CompanyName, Address=@Address, City=@City, PostalCode=@PostalCode, Country=@Country WHERE (CustomerID = @CustomerID)"
        deletecommand="Delete from Customers where CustomerID = @CustomerID"
        connectionstring="<%$ ConnectionStrings:NorthWindConnectionString%>"
        runat="server">
      </asp:sqldatasource>

    </form>
  </body>
</html>

Элемент управления SqlDataSource напрямую подключается к базе данных и таким образом реализует двухуровневую модель данных. Если необходимо привязать бизнес-объект среднего уровня, выполняющий извлечение и обновление данных, можно воспользоваться элементом управления ObjectDataSource. Дополнительные сведения см. в разделе Привязка к бизнес-объектам.

Дополнительные сведения об элементе управления SqlDataSource см. в разделе Общие сведения о серверном веб-элементе управления SqlDataSource.

Привязка к базе данных Access Microsoft

ASP.NET предоставляет элемент управления AccessDataSource, упрощающий задачу подключения к файлу базы данных Microsoft Access (MDB-файлу). Класс AccessDataSource наследуется от класса SqlDataSource и автоматически подключается к MDB-файлу с помощью поставщика данных System.Data.OleDb .NET Framework и поставщика данных Microsoft.Jet.OLEDB.4.0 OLE DB. Для подключения к базе данных Access путь к файлу предоставляется в свойстве DataFile. За исключением другого способа подключения к базе данных Access Microsoft, элемент управления AccessDataSource работает в точности как элемент управления SqlDataSource. Дополнительные сведения см. в разделе Извлечение данных с помощью серверного веб-элемента управления AccessDataSource.

См. также

Основные понятия

Общие сведения о доступе к данным в ASP.NET

Общие сведения о серверном веб-элементе управления LinqDataSource

Общие сведения о серверном веб-элементе управления SqlDataSource

Извлечение данных с помощью серверного веб-элемента управления AccessDataSource