Liaison à des bases de données

Mise à jour : novembre 2007

Les applications Web affichent fréquemment des données provenant d'une base de données relationnelle telle que Microsoft SQL Server, Microsoft Access, Oracle ou un magasin de données OLEDB ou ODBC. Pour simplifier la tâche de liaison d'un contrôle aux données d'une base de données, ASP.NET fournit les contrôles LinqDataSource et SqlDataSource.

Contrôle LinqDataSource

Le contrôle LinqDataSource vous permet d'utiliser LINQ (Language-Integrated Query) dans une page Web ASP.NET par un balisage déclaratif afin de récupérer et de modifier des données d'un objet de données. Le contrôle prend en charge la génération automatique des commandes Select, Update, Insert et Delete. Le contrôle prend également en charge les fonctions de tri, de filtrage et de pagination.

Lorsque vous utilisez le contrôle LinqDataSource pour agir sur les données d'une base de données, vous ne connectez pas directement le contrôle LinqDataSource à la base de données. Vous agissez en revanche sur les classes d'entité qui représentent la base de données et les tables. Vous pouvez générer les classes d'entité à l'aide d'Concepteur Objet/Relationnel ou en exécutant l'utilitaire SqlMetal.exe. Pour plus d'informations, consultez Concepteur Objet/Relationnel (Concepteur O/R) et Outil de génération de code (SqlMetal.exe).

Les classes d'entité que vous créez se trouvent en général dans le dossier App_Code de l'application Web. L'Concepteur O/R ou l'utilitaire SqlMetal.exe génère une classe qui représente la base de données et une classe pour chaque table dans la base de données.

Vous connectez le contrôle LinqDataSource à une classe de base de données en donnant à la propriété ContextTypeName le nom de la classe qui représente la base de données. Vous connectez le contrôle LinqDataSource à une table particulière en donnant à la propriété TableName le nom de la classe qui représente la table de données. Par exemple, pour vous connecter à la table Contacts de la base de données AdventureWorks, vous affectez à la propriété ContextTypeName un nom de classe tel que AdventureWorksDataContext (ou le nom que vous spécifiez pour l'objet de base de données, quel qu'il soit). Affectez à la propriété TableName la valeur Contacts.

L'exemple suivant montre un contrôle LinqDataSource qui récupère les données d'une table appelée Products. Il génère automatiquement les commandes pour prendre en charge les fonctions d'insertion, de mise à jour et de suppression de données. Un contrôle DetailsView affiche les données et crée des boutons qui permettent aux utilisateurs de modifier les données.

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

Pour plus d'informations, consultez Vue d'ensemble du contrôle serveur Web LinqDataSource.

Contrôle SqlDataSource

Le contrôle SqlDataSource représente une connexion directe à une base de données dans une application Web. Les contrôles liés aux données tels que les contrôles GridView, DetailsView et FormView peuvent utiliser le contrôle SqlDataSource pour récupérer et modifier automatiquement des données. Vous spécifiez des commandes pour sélectionner, insérer, mettre à jour et supprimer des données au sein du contrôle SqlDataSource et le contrôle exécute automatiquement ces opérations. Vous n'avez pas besoin d'écrire du code (par exemple, du code ADO.NET qui utilise des classes de l'espace de noms System.Data) pour créer une connexion et spécifier des commandes pour interroger et mettre à jour une base de données.

L'exemple de code suivant montre un contrôle GridView lié à un contrôle SqlDataSource afin de récupérer, de mettre à jour et de supprimer des données.

<%@ 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 >
    <title>GridView Edit Example</title>
</head>
<body>
    <form id="form1" >

      <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"  
        >
      </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%>"
        >
      </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 >
    <title>GridView Edit Example</title>
</head>
<body>
    <form id="form1" >

      <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"  
        >
      </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%>"
        >
      </asp:sqldatasource>

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

Le contrôle SqlDataSource se connecte directement à une base de données et implémente par conséquent un modèle de données à deux couches. Si vous devez créer une liaison à un objet métier de couche intermédiaire qui effectue la récupération de données et les mises à jour, vous pouvez utiliser le contrôle ObjectDataSource. Pour plus d'informations, consultez Liaison à des objets métier.

Pour plus d'informations sur le contrôle SqlDataSource, consultez Vue d'ensemble du contrôle serveur Web SqlDataSource.

Création d'une liaison à une base de données Microsoft Access

ASP.NET fournit un contrôle AccessDataSource qui simplifie la tâche de connexion à un fichier de base de données Microsoft Access (fichier .mdb). La classe AccessDataSource hérite de la classe SqlDataSource et se connecte automatiquement à un fichier .mdb à l'aide du fournisseur de données .NET Framework System.Data.OleDb et du fournisseur OLE DB Microsoft.Jet.OLEDB.4.0. Pour se connecter à une base de données Access, il est nécessaire de fournir un chemin d'accès en tant que propriété DataFile. Si ce n'est que le contrôle AccessDataSource se connecte de façon différente à une base de données Microsoft Access, pour le reste, il fonctionne exactement de la même manière que le contrôle SqlDataSource. Pour plus d'informations, consultez Récupération de données à l'aide du contrôle serveur Web AccessDataSource.

Voir aussi

Concepts

Vue d'ensemble de l'accès aux données ASP.NET

Vue d'ensemble du contrôle serveur Web LinqDataSource

Vue d'ensemble du contrôle serveur Web SqlDataSource

Récupération de données à l'aide du contrôle serveur Web AccessDataSource