Share via


Introduzione agli adattatori dati

Aggiornamento: novembre 2007

Gli adattatori dati sono parte integrante dei provider gestiti ADO.NET, che rappresentano l'insieme di oggetti utilizzati per la comunicazione tra un'origine dati e un dataset. Oltre agli adattatori, i provider gestiti includono gli oggetti connessione, gli oggetti lettore dati e gli oggetti Command. Gli adattatori consentono di scambiare dati tra un'origine dati e un dataset. In molte applicazioni questo implica la lettura dei dati da un database a un dataset e successivamente la riscrittura dei dati modificati dal dataset nel database. Un adattatore di dati, tuttavia, è in grado di trasferire i dati tra qualsiasi origine e un dataset. È possibile che sia disponibile, ad esempio, un adattatore che consente lo scambio di dati tra un server Microsoft Exchange e un dataset.

Nota:

Nella versione precedente di Visual Studio per le comunicazioni tra un'applicazione e un database venivano utilizzati degli adattatori dati. Mentre gli adattatori dati sono comunque un componente essenziale dei .Provider di dati .NET Framework (ADO.NET), gli oggetti TableAdapter sono componenti generati dalla finestra di progettazione che consentono di semplificare il processo di spostamento dei dati fra l'applicazione dell'utente e un database. Per ulteriori informazioni sull'utilizzo degli oggetti TableAdapter, vedere Cenni preliminari sugli oggetti TableAdapter.

In genere, gli adattatori sono configurabili per consentire di specificare i dati da inserire ed estrarre dal dataset, operazione di solito effettuata tramite riferimenti a istruzioni SQL o a stored procedure, richiamate per la lettura o la scrittura in un database.

In Visual Studio sono disponibili i seguenti adattatori dati da utilizzare con i database:

  • L'oggetto OleDbDataAdapter si presta all'utilizzo con qualsiasi origine dati esposta da un provider OLE DB.

  • L'oggetto SqlDataAdapter è specifico di SQL Server e risulta più veloce della classe OleDbDataAdapter in quanto non deve attraversare un livello OLE DB. Tuttavia, può essere utilizzato solo con SQL Server 7.0 o versione successiva.

  • L'oggetto OdbcDataAdapter è ottimizzato per l'accesso alle origini dati ODBC.

  • L'oggetto OracleDataAdapter è ottimizzato per l'accesso a database di Oracle.

    Nota:

    Adattatori dati, connessioni dati, comandi dati e lettori dati sono i componenti che costituiscono un provider di dati .NET Framework. Microsoft e altri provider possono rendere disponibili altri provider di dati .NET Framework da integrare in Visual Studio. Per ulteriori informazioni sui diversi provider di dati .NET Framework disponibili, vedere .Provider di dati .NET Framework (ADO.NET).

È possibile creare e manipolare gli adattatori mediante le parti degli spazi dei nomi del provider gestito di .NET Framework riportate di seguito.

Spazio dei nomi del provider gestito SqlClient

Spazio dei nomi SQL dei dati di sistema

Spazio dei nomi del provider gestito OleDb

Grafica SystemDataADOnamespace

Ciascun adattatore dati in genere rende possibile lo scambio di dati tra una singola tabella dell'origine dati e un singolo oggetto DataTable nel dataset. Nel caso in cui il dataset contenga più tabelle dati, la strategia più comune consiste nell'inserire i dati nel dataset mediante più adattatori dati e nello scrivere i dati del dataset in singole tabelle dell'origine dati.

Quando si desidera popolare una tabella in un dataset, è possibile chiamare un metodo dell'adattatore che esegua un'istruzione SQL o una stored procedure. L'adattatore crea un oggetto lettore dati (SqlDataReader, OleDbDataReader, OdbcDataReader o OracleDataReader) per leggere i dati in un dataset.

Nota:

La lettura dei dati direttamente dal database, senza archiviazione in un dataset, rappresenta un metodo molto efficace da adottare nelle situazioni che implicano l'utilizzo dei dati di sola lettura. Per ulteriori informazioni, vedere l'argomento "Dati di sola lettura" riportato di seguito. È possibile anche eseguire direttamente le istruzioni SQL senza utilizzarle al fine di popolare un dataset. Per ulteriori informazioni, vedere Comandi e parametri (ADO.NET).

Analogamente, quando si desidera aggiornare il database, è possibile richiamare un metodo dell'adattatore che chiami un'istruzione SQL o una stored procedure appropriata per eseguire l'aggiornamento effettivo nel database.

Adattatori dati e tabelle correlate

La presenza di tabelle distinte nel dataset implica in genere un adattatore dati che non faccia riferimento a comandi SQL o a stored procedure che uniscono tabelle. Le informazioni contenute nelle tabelle correlate vengono invece lette separatamente nel dataset da adattatori diversi. Viene quindi utilizzato un oggetto DataRelation per gestire i vincoli tra le tabelle DataSet, ad esempio per la propagazione degli aggiornamenti, e per consentire lo spostamento tra record master e figli correlati.

Si supponga ad esempio di utilizzare due tabelle correlate nel database Northwind, Customers e Orders. In tal caso, anziché specificare un'operazione di join per combinare entrambe le tabelle in un singolo gruppo di risultati, in genere vengono definiti due adattatori: uno per compilare la tabella Customers nel dataset e un altro per leggere i record relativi a Order in una diversa tabella Dataset. I singoli adattatori includeranno probabilmente i criteri di selezione per limitare il numero dei record nelle tabelle di dati.

Nel dataset verrà inoltre definito un oggetto DataRelation che specifica che i record relativi agli ordini sono correlati ai record relativi ai clienti mediante il campo CustomerID. È comunque possibile gestire le tabelle singolarmente. Tale operazione non sarebbe tuttavia possibile nel caso in cui fossero state unite le tabelle per il recupero dei record dall'origine dati. Per utilizzare record correlati, è possibile richiamare proprietà e metodi dell'oggetto DataRelation .

Per ulteriori informazioni sulle relazioni dati, vedere Relazioni nei dataset.

Oggetti connessione

Per leggere e scrivere i dati, è necessario che l'adattatore dati stabilisca una connessione aperta a un'origine dati. Un adattatore utilizza quindi oggetti connessione SqlConnection, OleDbConnection, OdbcConnection o OracleConnection) per comunicare con un'origine dati. L'adattatore può contenere fino a quattro riferimenti a connessioni, uno per ciascun tipo di operazione che è in grado di eseguire: selezione (Select), aggiornamento (Update), inserimento (Insert) ed eliminazione (Delete).

Nella tabella riportata di seguito sono elencati gli oggetti connessione presenti nella scheda Dati della Casella degli strumenti:

Oggetto connessione

Descrizione

SqlConnection

Connessione a un database di SQL Server 7.0 o versione successiva.

OleDbConnection

Connessione a qualsiasi origine dati OLE DB.

OdbcConnection

Connessione a un'origine dati ODBC.

OracleConnection

Connessione a un database di Oracle.

In tutti i casi, l'oggetto connessione rappresenta una sessione univoca all'interno dell'origine dati. Tutti gli oggetti connessione forniscono le proprietà per stabilire e modificare i dettagli relativi alla connessione, ad esempio l'ID utente e la password, e le impostazioni per il timeout della connessione. Forniscono inoltre i metodi per avviare ed eseguire il commit e il rollback delle transazioni di database. Per ulteriori informazioni sugli oggetti connessione, vedere Connessione a un'origine dati (ADO.NET).

Nota sulla sicurezza:

L'archiviazione di informazioni riservate, quali il nome server, il nome utente e la password, può compromettere la protezione dell'applicazione. L'autenticazione di Windows, detta anche protezione integrata, consente di controllare l'accesso a un database in modo più sicuro.

Oggetti Command ADO.NET

Mediante un adattatore è possibile leggere, aggiungere, aggiornare ed eliminare i record in un'origine dati. Per consentire di specificare la modalità di esecuzione di ciascuna di queste operazioni, un adattatore supporta le quattro proprietà che seguono:

  • SelectCommand: riferimento a un comando, istruzione SQL o nome di stored procedure, per il recupero di righe dall'archivio dati.

  • InsertCommand: riferimento a un comando per l'inserimento di righe nell'archivio dati.

  • UpdateCommand: riferimento a un comando per la modifica di righe nell'archivio dati.

  • DeleteCommand: riferimento a un comando per l'eliminazione di righe dall'archivio dati.

Le proprietà stesse sono oggetti, ovvero istanze della classe SqlCommand, OleDbCommand, OdbcCommand o OracleCommand. Gli oggetti supportano una proprietà CommandText contenente un riferimento a un'istruzione SQL o a una stored procedure.

Nota:

È necessario che esista una corrispondenza tra la classe di comando e la classe di connessione. Se si utilizza ad esempio un oggetto SqlConnection per la comunicazione con SQL Server, sarà necessario utilizzare anche i comandi derivanti dalla classe SqlCommand.

Sebbene sia possibile, non sempre è necessario impostare in modo esplicito il testo di un oggetto Command. Nella maggior parte dei casi in Visual Studio vengono generate le istruzioni SQL appropriate. Inoltre, se non si specificano gli oggetti UpdateCommand, InsertCommand o DeleteCommand, l'adattatore sarà in grado di generare automaticamente le istruzioni SQL appropriate in fase di esecuzione. Per ulteriori informazioni, vedere Generazione di comandi con CommandBuilder (ADO.NET).

È tuttavia possibile manipolare gli oggetti Command in fase di progettazione e di esecuzione al fine di avere un controllo più diretto sulla modalità di esecuzione dei comandi. È ad esempio possibile creare o modificare il comando associato a un oggetto SelectCommand prima che venga eseguito.

È possibile inoltre eseguire i comandi autonomamente, indipendentemente dall'adattatore dati. In tal modo, è possibile passare comandi SQL arbitrari mediante l'adattatore dati, ad esempio quelli utilizzati per definire o modificare le definizioni di database. È inoltre possibile chiamare in modo diretto le stored procedure che non restituiscono set di record, ad esempio una stored procedure che convalida le immissioni degli utenti in un database. Per ulteriori informazioni, vedere Esecuzione di un comando (ADO.NET).

Nota sulla sicurezza:

Quando si utilizzano comandi dati con una proprietà CommandType impostata su Text, controllare attentamente le informazioni inviate da un client prima di passarle al database. Utenti malintenzionati potrebbero tentare di inviare istruzioni SQL modificate o aggiuntive con l'obiettivo di ottenere un accesso non autorizzato o di danneggiare il database. Prima di trasferire l'input di un utente in un database, si consiglia di verificare sempre che le informazioni siano valide. È opportuno utilizzare, quando possibile, query con parametri o stored procedure. Per ulteriori informazioni, vedere Cenni preliminari sugli attacchi tramite script.

Parametri Command

I comandi di un adattatore dati sono in genere basati sui parametri. Per il comando relativo alla proprietà SelectCommand, ad esempio, viene spesso utilizzato un parametro nella clausola WHERE che consente di specificare in fase di esecuzione i record da recuperare dal database. Gli altri comandi utilizzano parametri che consentono di passare in fase di esecuzione i dati da scrivere in un record e di stabilire i record nel database da aggiornare. Per ulteriori informazioni sull'utilizzo dei parametri negli adattatori dati, vedere Parametri dei comandi degli adattatori dati.

Lettura e aggiornamento con gli adattatori dati

Un adattatore dati viene utilizzato principalmente per la comunicazione di dati tra un archivio dati e un dataset. Esso supporta metodi specifici per lo scambio dei dati tra l'archivio dati e il dataset.

Nota:

Per limitarsi alla sola lettura dei dati, escludendo quindi l'aggiornamento, non sarà necessario archiviarli in un dataset. È possibile infatti estrarre i dati dal database e leggerli direttamente all'interno di un'applicazione. Per ulteriori informazioni, vedere l'argomento "Dati di sola lettura" riportato di seguito.

Utilizzando un adattatore di dati è possibile effettuare le seguenti operazioni:

  • Recuperare le righe da un archivio dati nelle tabelle dati corrispondenti all'interno del dataset.

    Per recuperare righe in un dataset, utilizzare il metodo Fill in un oggetto adattatore dati (SqlDataAdapter, OleDbDataAdapter, OdbcDataAdapter o OracleDataAdapter). Una volta richiamato, il metodo Fill trasmetterà un'istruzione SQL SELECT all'archivio dati.

  • Trasmettere le modifiche apportate a una tabella Dataset all'archivio dati corrispondente.

    Per trasmettere una tabella DataSet del dataset all'archivio dati, utilizzare il metodo Update dell'adattatore. Una volta richiamato, il metodo eseguirà le istruzioni SQL INSERT, UPDATE o DELETE appropriate, a seconda che il record interessato sia nuovo, modificato o eliminato.

    Per ulteriori informazioni su come vengono effettuati gli aggiornamenti mediante gli adattatori dati, vedere Aggiornamenti di origini dati tramite DataAdapter (ADO.NET).

Dati di sola lettura

Se nel programma creato è necessario eseguire un'iterazione sequenziale e in sola lettura del risultato di una query, è possibile utilizzare un oggetto lettore dati anziché riempire un dataset. Un oggetto lettore dati recupera i dati dall'origine dati e li passa direttamente all'applicazione. Generalmente gli oggetti lettore dati vengono utilizzati per l'accesso in modalità di sola lettura e forward-only ai dati quando non è necessario inserire nella cache i dati di un dataset. Lo stesso adattatore dati utilizza un oggetto lettore dati per popolare un dataset. Un esempio è rappresentato da una pagina di Web Form in cui vengono visualizzate le informazioni relative al database. Dal momento che viene ricreata con ciascuna sequenza di andata e ritorno dei dati, è in genere opportuno non archiviare i dati in un dataset.

In Visual Studio sono disponibili quattro oggetti lettore dati: SqlDataReader, OleDbDataReader, OdbcDataReader e OracleDataReader. Per ulteriori informazioni sull'utilizzo dell'oggetto lettore dati per un accesso efficiente di sola lettura, vedere DataAdapter e DataReader (ADO.NET).

Mapping di tabelle

In base all'impostazione predefinita, quando si utilizzano gli strumenti di Visual Studio per generare un dataset dalle tabelle di database, i nomi delle tabelle e delle colonne sono identici nel dataset e nel database. Questa situazione può risultare tuttavia poco fattibile. È possibile, ad esempio, che i nomi utilizzati nel database siano troppo brevi o troppo dettagliati o che siano stati definiti in una lingua straniera. Se si utilizza uno schema esistente, i nomi definiti nello schema potrebbero non corrispondere a quelli utilizzati nel database.

Non è quindi necessario che esista una corrispondenza tra i nomi del database e quelli del dataset. È possibile invece creare nuovi nomi di tabelle e colonne nel comando dataset e associarli ai nomi utilizzati nel database. Per mantenere la corrispondenza tra le strutture del dataset (tabelle dati e colonne dati) e le strutture dell'archivio dati (tabelle e colonne), gli adattatori utilizzano l'insieme TableMappings. Per ulteriori informazioni sul mapping delle tabelle, vedere Mapping di tabelle negli adattatori dati.

Vedere anche

Attività

Procedura: configurare i parametri per gli adattatori dati

Procedura: eseguire il mapping delle colonne dell'origine dati alle colonne delle tabelle dati di un dataset

Concetti

Compilazione di un DataSet da un oggetto DataAdapter (ADO.NET)

Novità relative ai dati

Creazione di applicazioni dati con Visual Studio

Altre risorse

DataAdapter e DataReader (ADO.NET)

Creazione di adattatori dati

Procedure dettagliate relative ai dati

ADO.NET