Procedura dettagliata: salvataggio dei dati dalle tabelle dati correlate (aggiornamento gerarchico)

Salvare i dati di un'applicazione nel database è un'operazione abbastanza semplice quando si usa una singola tabella di dati e non è necessario prendere in considerazione alcun vincolo di chiave esterna. Mentre per salvare i dati da un set di dati contenente due o più tabelle dati correlate, è necessario inviare le modifiche al database in un ordine specifico in modo da non violare alcun vincolo. Quando si aggiornano i dati modificati in tabelle correlate, è possibile fornire la logica a livello di codice per estrarre subset di dati specifici da ogni tabella dati e inviare gli aggiornamenti al database nell'ordine corretto oppure è possibile usare il componente TableAdapterManager.

Questa procedura dettagliata illustra come salvare i dati correlati con il componente TableAdapterManager. Per informazioni sulla codifica manuale degli aggiornamenti delle tabelle dati correlate, vedere Procedura dettagliata: salvataggio di dati in un database (a più tabelle).

Prerequisiti

Per completare questa procedura dettagliata, è necessario:

Creazione dell'applicazione basata su Windows

Il primo passaggio di questa procedura dettagliata consiste nella creazione di una nuova applicazione basata su Windows.

Per creare una nuova applicazione basata su Windows

  1. Scegliere il comando per la creazione di un nuovo progetto dal menu File.

    Nota

    Poiché l'aggiornamento gerarchico è supportato nei progetti Visual Basic e C#, creare il nuovo progetto in uno di questi linguaggi.

  2. Assegnare al progetto il nome HierarchicalUpdateWalkthrough.

  3. Selezionare Applicazione Windows Form e fare clic su OK. Per altre informazioni, vedere Sviluppo di applicazioni client con .NET Framework.

    Il progetto HierarchicalUpdateWalkthrough viene creato e aggiunto a Esplora soluzioni.

Creazione del set di dati

Poiché per illustrare gli aggiornamenti gerarchici sono necessarie le tabelle correlate, il passaggio successivo consiste nel creare un set di dati contenente le tabelle Customers e Orders del database Northwind. Creare il set di dati con la Configurazione guidata origine dati. Per creare la connessione, è necessario avere accesso al database di esempio Northwind. Per informazioni su come impostare il database di esempio Northwind, vedere Procedura: installare database di esempio.

Per creare il dataset

  1. Scegliere Mostra origini dati dal menu Dati.

  2. Nella finestra Origini dati fare clic su Aggiungi nuova origine dati per avviare la Configurazione guidata origine dati.

  3. Nella pagina Seleziona un tipo di origine dati fare clic su Database, quindi su Avanti.

  4. Nella pagina Seleziona connessione dati eseguire una delle operazioni seguenti:

    • Selezionare nell'elenco a discesa la connessione dati al database di esempio Northwind, se presente.

      -oppure-

    • Fare clic su Nuova connessione per aprire la finestra di dialogo Aggiungi/Modifica connessione.

  5. Se il database richiede una password, selezionare l'opzione che consente di includere dati riservati, quindi fare clic su Avanti.

  6. Scegliere Avanti nella pagina Salva stringa di connessione nel file di configurazione dell'applicazione.

  7. Espandere il nodo Tabelle nella pagina Seleziona oggetti di database.

  8. Selezionare le caselle di controllo per le tabelle Customers e Orders, quindi fare clic su Fine.

    L'oggetto NorthwindDataSet viene creato e aggiunto al progetto e le tabelle vengono visualizzate nella finestra Origini dati.

Modifica dei controlli associati a dati predefiniti da creare

Dopo avere popolato la finestra Origini dati, è possibile scegliere i controlli da creare quando si trascinano gli elementi in un Windows Form. In questa procedura dettagliata i dati della tabella Customers verranno visualizzati in singoli controlli (Dettagli). I dati della tabella Orders verranno visualizzati in un controllo DataGridView (DataGridView).

Per impostare il controllo per gli elementi della finestra Origini dati

  1. Espandere il nodo Customers nella finestra Origini dati.

  2. Impostare i controlli da creare per la tabella Customers sui singoli controlli selezionando Dettagli nell'elenco dei controlli del nodo Customers. Per altre informazioni, vedere Procedura: impostare il controllo da creare per il trascinamento dalla finestra Origini dati.

    Nota

    Per la tabella Orders verrà usato il controllo predefinito, DataGridView.

Creazione del form associato a dati

Dopo aver scelto i controlli nella finestra Origini dati, creare i controlli associati a dati trascinando gli elementi nel form.

Per creare i controlli associati a dati per i dati di Customers e Orders

  1. Trascinare il nodo Customers principale dalla finestra Origini dati in Form1.

    Nel form vengono visualizzati i controlli associati a dati con etichette descrittive, insieme a un componente TableAdapterManager, ovvero una barra degli strumenti (BindingNavigator), per lo spostamento all'interno dei record. Nella barra dei componenti vengono visualizzati un oggetto DataSet tipizzato, un oggetto TableAdapter e un oggetto BindingSource.

  2. Trascinare il nodo Orders correlato dalla finestra Origini dati in Form1.

    Nota

    Il nodo Orders correlato si trova al di sotto del nodo Fax della tabella Customers ed è un nodo figlio del nodo Customers.Il nodo Orders visualizzato allo stesso livello del nodo Customers rappresenta tutti gli ordini presenti nella tabella.Il nodo Orders visualizzato come nodo figlio del nodo Customers rappresenta gli ordini correlati.

    Nel form vengono visualizzati un controllo DataGridView e una barra degli strumenti (BindingNavigator) per lo spostamento all'interno dei record. Nella barra dei componenti vengono visualizzati gli oggetti TableAdapter e BindingSource.

Modifica del codice di salvataggio generato per l'esecuzione dell'aggiornamento gerarchico

Salvare le modifiche dalle tabelle dati correlate del set di dati nel database chiamando il metodo TableAdapterManager.UpdateAll e passando il nome del set di dati contenente le tabelle correlate. Ad esempio, eseguire il metodo TableAdapterManager.UpdateAll(NorthwindDataset) per inviare gli aggiornamenti da tutte le tabelle presenti in NorthwindDataSet al database back-end.

Dopo avere rilasciato gli elementi dalla finestra Origini dati, il codice viene automaticamente aggiunto all'evento Form_Load per popolare ogni tabella (metodi TableAdapter.Fill). Il codice viene inoltre aggiunto all'evento Click del pulsante Sala di BindingNavigator per salvare i dati dal set di dati nel database (metodo TableAdapterManager.UpdateAll).

Il codice di salvataggio generato contiene anche una riga di codice che chiama il metodo CustomersBindingSource.EndEdit. In particolare, chiama il metodo EndEdit del primo oggetto BindingSource aggiunto al form. In altre parole, questo codice viene generato solo per la prima tabella trascinata dalla finestra Origini dati nel form. La chiamata al metodo EndEdit esegue il commit di tutte le modifiche in corso nei controlli associati a dati che si stanno modificando. Pertanto, se un controllo associato a dati ha lo stato attivo e si fa clic sul pulsante Salva, prima del salvataggio effettivo verrà eseguito il commit di tutte le modifiche in sospeso nel controllo (metodo TableAdapterManager.UpdateAll).

Nota

La finestra di progettazione aggiunge solo il codice BindingSource.EndEdit per la prima tabella rilasciata nel form.Pertanto, è necessario aggiungere una riga di codice per chiamare il metodo BindingSource.EndEdit per ogni tabella correlata nel form.Per questa procedura dettagliata, è necessario quindi aggiungere una chiamata al metodo OrdersBindingSource.EndEdit.

Per aggiornare il codice in modo da eseguire il commit delle modifiche apportate alle tabelle correlate prima del salvataggio

  1. Fare doppio clic sul pulsante Salva in BindingNavigator per aprire Form1 nell'editor del codice.

  2. Aggiungere una riga di codice per chiamare il metodo OrdersBindingSource.EndEdit dopo la riga che chiama il metodo CustomersBindingSource.EndEdit. Il codice nell'evento Click del pulsante Salva deve essere simile al seguente:

    Me.Validate()
    Me.CustomersBindingSource.EndEdit()
    Me.OrdersBindingSource.EndEdit()
    Me.TableAdapterManager.UpdateAll(Me.NorthwindDataSet)
    
    this.Validate();
    this.customersBindingSource.EndEdit();
    this.ordersBindingSource.EndEdit();
    this.tableAdapterManager.UpdateAll(this.northwindDataSet);
    

Oltre a eseguire il commit delle modifiche apportate a una tabella figlio correlata prima di salvare i dati in un database, potrebbe anche essere necessario eseguire il commit dei record padre appena creati prima di aggiungere i nuovi record figlio in un set di dati. In altre parole, potrebbe essere necessario aggiungere il nuovo record padre (Customer) al set di dati affinché i vincoli di chiave esterna consentano l'aggiunta dei nuovi record figli (Orders) al set di dati. A tale scopo, è possibile usare l'evento figlio BindingSource.AddingNew.

Nota

Il commit dei nuovi record padre dipende dal tipo di controllo usato per eseguire l'associazione all'origine dati.In questa procedura dettagliata vengono usati i singoli controlli per eseguire l'associazione alla tabella padre. Ciò richiede il codice aggiuntivo per eseguire il commit del nuovo record padre.Se i record padre sono stati visualizzati in un controllo con associazione complessa come DataGridView, questa chiamata aggiuntiva a EndEdit per il record padre non è necessaria,perché la funzionalità di data-binding sottostante del controllo gestisce l'esecuzione del commit dei nuovi record.

Per aggiungere il codice per eseguire il commit dei record padre nel set di dati prima dell'aggiunta dei nuovi record figlio

  1. Creare un gestore eventi per l'evento OrdersBindingSource.AddingNew.

    • Aprire Form1 in visualizzazione Progettazione, fare clic su OrdersBindingSource nella barra dei componenti, selezionare Eventi nella finestra Proprietà, quindi fare doppio clic sull'evento AddingNew.
  2. Aggiungere al gestore eventi una riga di codice che chiama il metodo CustomersBindingSource.EndEdit. Il codice nel gestore eventi OrdersBindingSource_AddingNew deve essere simile al seguente:

    Me.CustomersBindingSource.EndEdit()
    
    this.customersBindingSource.EndEdit();
    

Verifica dell'abilitazione degli aggiornamenti gerarchici

Gli aggiornamenti gerarchici vengono attivati e disattivati mediante l'impostazione della proprietà Aggiornamento gerarchico del set di dati. Gli aggiornamenti gerarchici vengono abilitati per impostazione predefinita, pertanto per questa procedura dettagliata non è necessario modificare il valore della proprietà Aggiornamento gerarchico.

Per verificare l'abilitazione degli aggiornamenti gerarchici

  1. Aprire il set di dati in Progettazione DataSet facendo doppio clic sul file NorthwindDataSet.xsd file in Esplora soluzioni.

  2. Selezionare un'area vuota nell'area di progettazione.

  3. Individuare la proprietà Aggiornamento gerarchico nella finestra Proprietà e verificare che sia impostata su True.

    Nota

    L'impostazione della proprietà Aggiornamento gerarchico consente di controllare se il codice viene generato con un oggetto TableAdapterManager e con la logica per eseguire gli aggiornamenti gerarchici.Se si imposta HierarchicalUpdate su True viene generato un oggetto TableAdapterManager, mentre se si imposta su False non viene generato alcun oggetto TableAdapterManager.

Verifica dell'applicazione

Per eseguire il test dell'applicazione

  1. Premere F5.

  2. Apportare alcune modifiche ai dati di uno o più record di ogni tabella.

  3. Aggiungere un nuovo cliente e quindi aggiungere un nuovo ordine per tale cliente.

  4. Fare clic sul pulsante Salva. TableAdapterManager gestisce la logica necessaria per tutti gli aggiornamenti correlati.

  5. Controllare i valori presenti nel database per verificare che le modifiche siano state salvate in ogni tabella.

Passaggi successivi

A seconda dei requisiti dell'applicazione, è possibile eseguire diverse operazioni dopo il salvataggio dei dati correlati nell'applicazione basata su Windows. È possibile apportare alcuni miglioramenti a questa applicazione, tra cui:

  • Aggiungere una terza tabella, ad esempio la tabella OrderDetails, e provare a usare una gerarchia a tre tabelle.

  • Aggiungere il codice di convalida per verificare che i dati soddisfino i requisiti dell'applicazione oltre ai vincoli del database. Per altre informazioni, vedere Convalida dei dati.

Vedere anche

Attività

Procedura: configurare i vincoli di chiave esterna in un dataset

Procedura: impostare l'ordine per l'esecuzione di un aggiornamento gerarchico

Procedura: eseguire il commit delle modifiche in corso nei controlli con associazione a dati prima del salvataggio dei dati

Procedura: implementare l'aggiornamento gerarchico in progetti di Visual Studio esistenti

Procedura dettagliata: salvataggio dei dati dalle tabelle dati correlate (aggiornamento gerarchico)

Concetti

Salvataggio di dati

Altre risorse

Aggiornamento gerarchico

DataSet, DataTable e DataView