Condividi tramite


Associazione a database

Aggiornamento: novembre 2007

Nelle applicazioni Web in genere vengono visualizzati i dati provenienti da un database relazionale come Microsoft SQL Server, Microsoft Access, Oracle o un archivio dati OLEDB o ODBC. Per semplificare l'attività di associazione di un controllo ai dati di un database, in ASP.NET sono disponibili i controlli LinqDataSource e SqlDataSource.

Controllo LinqDataSource

Il controllo LinqDataSource consente di utilizzare Language Integrated Query (LINQ) in una pagina Web ASP.NET tramite codice dichiarativo per recuperare e modificare i dati di un oggetto dati. Il controllo supporta la generazione automatica di comandi di selezione, aggiornamento, inserimento ed eliminazione. Il controllo supporta inoltre l'ordinamento, il filtraggio e lo spostamento.

Quando si utilizza il controllo LinqDataSource per interagire con i dati di un database, non si connette il controllo LinqDataSource direttamente al database. Si interagisce invece con le classi di entità che rappresentano il database e le tabelle. È possibile generare le classi di entità tramite Object Relational Designer o eseguendo l'utilità SqlMetal.exe. Per ulteriori informazioni, vedere Progettazione relazionale oggetti e Strumento per la generazione del codice (SqlMetal.exe).

Le classi di entità create sono in genere reperibili nella cartella App_Code dell'applicazione Web. O/R Designer o l'utilità SqlMetal.exe genererà una classe che rappresenta il database e una classe per ogni tabella del database.

Per connettere il controllo LinqDataSource a una classe di database, è necessario impostare la proprietà ContextTypeName sul nome della classe che rappresenta il database. Per connettere invece il controllo LinqDataSource a una determinata tabella, è necessario impostare la proprietà TableName sul nome della classe che rappresenta la tabella dati. Ad esempio, per connettersi alla tabella Contacts del database AdventureWorks, è necessario impostare la proprietà ContextTypeName su un nome di classe quale AdventureWorksDataContext o su qualsiasi altro nome specificato per l'oggetto di database. È quindi necessario impostare la proprietà TableName su Contacts.

Nell'esempio seguente viene illustrato un controllo LinqDataSource che recupera i dati da una tabella denominata Products. Vengono generati automaticamente i comandi per supportare l'inserimento, l'aggiornamento e l'eliminazione dei dati. Un controllo DetailsView visualizza i dati e crea i pulsanti che consentono agli utenti di modificare i dati.

<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>

Per ulteriori informazioni, vedere Cenni preliminari sul controllo server Web LinqDataSource.

Controllo SqlDataSource

Il controllo SqlDataSource rappresenta una connessione diretta a un database in un'applicazione Web. I controlli con associazione a dati, come GridView, DetailsView e FormView, possono utilizzare il controllo SqlDataSource per recuperare e modificare automaticamente i dati. I comandi vengono specificati per selezionare, inserire, aggiornare ed eliminare dati nell'ambito del controllo SqlDataSource, il quale esegue tali operazioni automaticamente. Non è necessario scrivere codice, ad esempio il codice ADO.NET che utilizza classi nello spazio dei nomi System.Data, per creare una connessione e specificare comandi per eseguire query e aggiornare un database.

Nell'esempio di codice riportato di seguito viene illustrato un controllo GridView associato a un controllo SqlDataSource per il recupero, l'aggiornamento e l'eliminazione di dati.

<%@ 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>

Il controllo SqlDataSource si connette direttamente a un database e implementa quindi un modello dati a due livelli. Se è necessario eseguire l'associazione a un oggetto business di livello intermedio che esegue il recupero e gli aggiornamenti dei dati, è possibile utilizzare il controllo ObjectDataSource. Per informazioni dettagliate, vedere Associazione a oggetti business.

Per ulteriori informazioni sul controllo SqlDataSource, vedere Cenni preliminari sul controllo server Web SqlDataSource.

Associazione a un database di Microsoft Access

In ASP.NET è disponibile un controllo AccessDataSource che semplifica l'attività di connessione a un file di database di Microsoft Access con estensione mdb. La classe AccessDataSource eredita dalla classe SqlDataSource e si connette automaticamente a un file mdb utilizzando il provider di dati .NET Framework System.Data.OleDb e il provider Microsoft.Jet.OLEDB.4.0 OLE DB. Per connettersi a un database Access, il percorso del file viene specificato mediante la proprietà DataFile. Al di là della differenza nelle modalità di connessione del controllo AccessDataSource a un database di Microsoft Access, il controllo presenta lo stesso funzionamento di SqlDataSource. Per ulteriori informazioni, vedere Recupero dei dati tramite il controllo server Web AccessDataSource.

Vedere anche

Concetti

Cenni preliminari sull'accesso ai dati ASP.NET

Cenni preliminari sul controllo server Web LinqDataSource

Cenni preliminari sul controllo server Web SqlDataSource

Recupero dei dati tramite il controllo server Web AccessDataSource