Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Annotazioni
La DataSet classe e le classi correlate sono tecnologie .NET Framework legacy dei primi anni '2000 che consentono alle applicazioni di lavorare con i dati in memoria mentre le app vengono disconnesse dal database. Le tecnologie sono particolarmente utili per le app che consentono agli utenti di modificare i dati e rendere persistenti le modifiche apportate al database. Sebbene i set di dati siano una tecnologia di successo comprovata, l'approccio consigliato per le nuove applicazioni .NET consiste nell'usare Entity Framework Core. Entity Framework offre un modo più naturale per usare i dati tabulari come modelli a oggetti e dispone di un'interfaccia di programmazione più semplice.
Un componente TableAdapter popola un dataset con i dati del database, in base a una o più query o stored procedure che specifichi. Gli oggetti TableAdapter possono anche eseguire aggiunte, aggiornamenti ed eliminazioni nel database per rendere persistenti le modifiche apportate al set di dati. Inoltre, è possibile eseguire comandi globali non correlati a una tabella specifica.
Annotazioni
I progettisti di Visual Studio generano TableAdapters. Se si creano set di dati a livello di codice, usare la DataAdapter classe .NET.
Per informazioni dettagliate sulle operazioni TableAdapter, è possibile passare direttamente a uno di questi articoli:
| Articolo | Descrizione |
|---|---|
| Creare e configurare TableAdapter | Scopri come usare i progettisti per creare e configurare i TableAdapters. |
| Creare query parametrizzate di TableAdapter | Scopri come consentire agli utenti di fornire argomenti alle procedure o query di TableAdapter. |
| Accedere direttamente al database con un oggetto TableAdapter | Informazioni su come usare i DbDirect metodi di TableAdapters. |
| Disattivare i vincoli durante il riempimento di un set di dati | Informazioni su come usare vincoli di chiave esterna durante l'aggiornamento dei dati. |
| Estendere la funzionalità di un TableAdapter | Informazioni su come aggiungere codice personalizzato a TableAdapters. |
| Leggere i dati XML in un set di dati | Informazioni su come usare i dati XML in un set di dati. |
Panoramica di TableAdapter
Gli oggetti TableAdapter sono componenti generati dalla finestra di progettazione che si connettono a un database, eseguono query o stored procedure e compilano DataTable con i dati restituiti. Gli oggetti TableAdapter inviano anche dati aggiornati dall'applicazione al database. È possibile eseguire tutte le query desiderate in un oggetto TableAdapter, purché restituisca dati conformi allo schema della tabella associata. Il diagramma seguente mostra come gli oggetti TableAdapter interagiscono con i database e altri oggetti in memoria:
Sebbene gli oggetti TableAdapter siano progettati con il Progettista del Set di Dati, le TableAdapter classi non vengono generate come classi annidate di DataSet. Si trovano invece in spazi dei nomi distinti specifici per ogni set di dati. Ad esempio, se si dispone di un set di dati denominato NorthwindDataSet, gli oggetti TableAdapter associati agli oggetti DataTable si trovano nello spazio dei nomi NorthwindDataSetTableAdapters. Per accedere a un particolare TableAdapter a livello di codice, dichiarare una nuova istanza della TableAdapter classe . Per esempio:
NorthwindDataSet northwindDataSet = new NorthwindDataSet();
NorthwindDataSetTableAdapters.CustomersTableAdapter customersTableAdapter =
new NorthwindDataSetTableAdapters.CustomersTableAdapter();
customersTableAdapter.Fill(northwindDataSet.Customers);
Schema DataTable associato
Quando si crea un oggetto TableAdapter, si usa la query iniziale o la stored procedure per definire lo schema dell'oggetto TableAdapter associato.DataTable Esegui questa query iniziale o stored procedure chiamando il metodo TableAdapter Fill, che riempie l'insieme associato al TableAdapter DataTable. Tutte le modifiche apportate alla query principale di TableAdapter vengono riflesse nello schema della tabella dati associata. Ad esempio, se si rimuove una colonna dalla query principale, il Dataset Designer rimuove anche la colonna dalla tabella dati associata. Se eventuali query aggiuntive in TableAdapter usano istruzioni SQL che restituiscono colonne che non si trovano nella query principale, Progettazione set di dati tenta di sincronizzare le modifiche delle colonne tra la query principale e le query aggiuntive.
Comandi di aggiornamento TableAdapter
La funzionalità di aggiornamento di un TableAdapter dipende dalla quantità di informazioni disponibili nella query principale nel Wizard del TableAdapter. Ad esempio, i tableAdapter configurati per recuperare i valori da più tabelle (usando un JOIN), i valori scalari, le viste o i risultati delle funzioni di aggregazione non vengono inizialmente creati con la possibilità di inviare gli aggiornamenti al database sottostante. Tuttavia, è possibile configurare manualmente le proprietà InsertCommand, UpdateCommand e DeleteCommand nella finestra Proprietà .
Query di TableAdapter
Gli oggetti TableAdapter possono contenere più query per riempire le tabelle di dati associate. È possibile definire il numero di query per un oggetto TableAdapter richiesto dall'applicazione, purché ogni query restituisca dati conformi allo stesso schema della tabella dati associata. Questa funzionalità consente a un TableAdapter di caricare risultati diversi in base a criteri diversi.
Ad esempio, se l'applicazione contiene una tabella con i nomi dei clienti, è possibile creare una query che riempia la tabella con ogni nome cliente che inizia con una determinata lettera. È possibile creare un'altra query che riempie la tabella con tutti i clienti che si trovano nello stesso stato. Per riempire una Customers tabella con i clienti in uno stato specifico, creare una FillByState query che accetta un parametro per il valore di stato come indicato di seguito: SELECT * FROM Customers WHERE State = @State. Eseguire la query chiamando il FillByState metodo e passando il valore del parametro, ad esempio : CustomerTableAdapter.FillByState("WA").
Oltre ad aggiungere query che restituiscono dati dello stesso schema della tabella di dati di TableAdapter, è possibile aggiungere query che restituiscono valori scalari (singoli). Ad esempio, una query che restituisce un conteggio di clienti (SELECT Count(*) From Customers) è valida per un CustomersTableAdapteroggetto , anche se i dati restituiti non sono conformi allo schema della tabella.
ClearBeforeFill - proprietà
Per impostazione predefinita, ogni volta che si esegue una query per riempire una tabella dati di TableAdapter, i dati esistenti vengono cancellati e solo i risultati della query vengono caricati nella tabella. Se si desidera aggiungere o unire i dati restituiti da una query ai dati esistenti in una tabella dati, impostare la proprietà TableAdapter ClearBeforeFill su false. Indipendentemente dal fatto che i dati siano stati cancellati, è necessario inviare nuovamente gli aggiornamenti al database in modo esplicito se si desidera renderli persistenti. Assicurarsi pertanto di salvare le modifiche apportate ai dati nella tabella prima di eseguire un'altra query che riempie la tabella. Per altre informazioni, vedere Aggiornare i dati usando un oggetto TableAdapter.
Ereditarietà di TableAdapter
Gli oggetti TableAdapter estendono la funzionalità degli adattatori dati standard incapsulando una classe configurata DataAdapter . Per impostazione predefinita, TableAdapter eredita dalla classe Component e non può essere convertita alla classe DataAdapter. Il cast di un TableAdapter nella classe DataAdapter genera un errore InvalidCastException. Per modificare la classe di base di un TableAdapter, specificare una classe che deriva dalla Component classe nella proprietà Classe base dell'oggetto TableAdapter in Progettazione set di dati.
Metodi e proprietà TableAdapter
La TableAdapter classe non è un tipo .NET, il che significa che non è possibile cercarlo nel Visualizzatore oggetti o nella documentazione di riferimento. Visual Studio lo crea in fase di progettazione quando si usa una delle procedure guidate descritte in precedenza. Il nome assegnato da Visual Studio a un oggetto TableAdapter creato si basa sul nome della tabella in uso. Ad esempio, quando si crea un oggetto TableAdapter basato su una tabella in un database denominato Orders, tableAdapter è denominato OrdersTableAdapter. Per modificare il nome della classe di TableAdapter, utilizzare la proprietà Name nella finestra Proprietà di Progettazione set di dati.
I metodi e le proprietà comunemente usati di un TableAdapter sono i seguenti:
| Membro | Descrizione |
|---|---|
TableAdapter.Fill |
Popola la tabella dati associata di TableAdapter con i risultati del comando di SELECT TableAdapter. |
TableAdapter.Update |
Invia le modifiche al database e restituisce un numero intero che rappresenta il numero di righe interessate dall'aggiornamento. Per altre informazioni, vedere Aggiornare i dati usando un oggetto TableAdapter. |
TableAdapter.GetData |
Restituisce un nuovo DataTable riempito con i dati. |
TableAdapter.Insert |
Crea una nuova riga nella tabella dati. Per altre informazioni, vedere Inserire nuovi record in un database. |
TableAdapter.ClearBeforeFill |
Determina se una tabella dati viene svuotata prima di chiamare uno dei Fill metodi . |
metodo di aggiornamento di TableAdapter
Gli oggetti TableAdapter usano comandi di dati per leggere e scrivere dal database. Usare la query iniziale Fill (main) del TableAdapter come base per creare lo schema della tabella dati associata, e i comandi InsertCommand, UpdateCommand e DeleteCommand associati al metodo TableAdapter.Update. Quando si chiama il metodo di TableAdapter, esegue le istruzioni create durante la configurazione originale di Update TableAdapter e non una delle query aggiuntive aggiunte con la Configurazione guidata query TableAdapter.
Quando si utilizza un TableAdapter, esegue efficacemente le stesse operazioni utilizzando i comandi che si eseguono abitualmente. Ad esempio, quando si chiama il metodo dell'adattatore Fill , l'adattatore esegue il comando dati nella relativa SelectCommand proprietà e usa un lettore dati ,ad esempio , SqlDataReaderper caricare il set di risultati nella tabella dati. Analogamente, quando si chiama il metodo dell'adattatore Update, esegue il comando appropriato (nelle proprietà UpdateCommand, InsertCommand e DeleteCommand) per ogni record modificato nella tabella dei dati.
Annotazioni
Se la query principale contiene informazioni sufficienti, il designer crea i comandi InsertCommand, UpdateCommand e DeleteCommand per impostazione predefinita quando genera il TableAdapter. Tuttavia, se la query principale di TableAdapter è più di una singola istruzione di tabella SELECT , la finestra di progettazione potrebbe non essere in grado di generare questi comandi. In questo caso, è possibile che venga visualizzato un errore quando si esegue il TableAdapter.Update metodo .
TableAdapter GenerateDbDirectMethods
Oltre a InsertCommand, UpdateCommande DeleteCommand, i tableAdapter vengono creati con i metodi seguenti che è possibile eseguire direttamente nel database: TableAdapter.Insert, TableAdapter.Updatee TableAdapter.Delete. È possibile chiamare questi metodi direttamente per modificare i dati nel database. In questo modo è possibile chiamare questi singoli metodi dal codice anziché chiamare TableAdapter.Update per gestire gli inserimenti, gli aggiornamenti e le eliminazioni in sospeso per la tabella dati associata.
Se non si desidera creare questi metodi diretti, impostare la proprietà GenerateDbDirectMethods di TableAdapter su False nella finestra Proprietà . Le query aggiuntive aggiunte a TableAdapter sono query autonome, che non generano questi metodi.
Supporto di TableAdapter per tipi nullable
Gli TableAdapter supportano i tipi nullable Nullable<T> e T?. Per altre informazioni sui tipi nullable in Visual Basic, vedere Tipi di valori Nullable (Visual Basic).For more information about nullable types in Visual Basic, see Nullable value types (Visual Basic). Per altre informazioni sui tipi nullable in C#, vedere Tipi valore nullable (C#).
Informazioni di riferimento su TableAdapterManager
Per impostazione predefinita, Visual Studio genera una TableAdapterManager classe quando si crea un set di dati contenente tabelle correlate. Per impedire la generazione della classe, modificare il valore della Hierarchical Update proprietà del set di dati in false. Quando si trascina una tabella con una relazione nell'area di progettazione di una pagina Windows Form o WPF, Visual Studio dichiara una variabile membro della classe . Se non si usa databinding, è necessario dichiarare manualmente la variabile.
Poiché la TableAdapterManager classe non è un tipo .NET, non viene visualizzata nella documentazione di riferimento. Visual Studio lo crea in fase di progettazione come parte del processo di creazione del set di dati.
Nella tabella seguente sono elencati i metodi e le proprietà usati di frequente della TableAdapterManager classe :
| Membro | Descrizione |
|---|---|
Metodo UpdateAll |
Salva tutti i dati da tutte le tabelle dati. |
BackUpDataSetBeforeUpdate proprietà |
Determina se creare una copia di backup del set di dati prima di eseguire .TableAdapterManager.UpdateAllmethod.Boolean |
tableNameTableAdapter proprietà |
Rappresenta un TableAdapter. Il TableAdapterManager generato contiene una proprietà per ciascuna TableAdapter che gestisce. Ad esempio, un set di dati con una tabella Customers e Orders genera un TableAdapterManager che contiene le proprietà CustomersTableAdapter e OrdersTableAdapter. |
UpdateOrder proprietà |
Controlla l'ordine dei singoli comandi di inserimento, aggiornamento ed eliminazione. Impostare questa proprietà su uno dei valori nell'enumerazione TableAdapterManager.UpdateOrderOption .Per impostazione predefinita, UpdateOrder è impostato su InsertUpdateDelete, il che significa che gli inserimenti, gli aggiornamenti e le eliminazioni vengono eseguiti per tutte le tabelle nel set di dati. |
Sicurezza
Quando si usano comandi dati con una CommandType proprietà impostata su Text, controllare attentamente le informazioni inviate da un client prima di passarlo al database. Gli utenti malintenzionati potrebbero provare a inviare (inserire) istruzioni SQL modificate o aggiuntive per ottenere l'accesso non autorizzato al database. Prima di trasferire l'input dell'utente in un database, verificare sempre che le informazioni siano valide. Quando possibile, è consigliabile usare query o stored procedure con parametri.