Share via


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

Aggiornamento: novembre 2007

Salvare i dati di un'applicazione nel database è un'operazione abbastanza semplice quando si utilizza una singola tabella di dati e non è necessario prendere in considerazione alcun vincolo di chiave esterna. Mentre per salvare i dati da un dataset 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 i sottoinsiemi di dati specifici da ogni tabella dati e inviare gli aggiornamenti al database nell'ordine corretto oppure è possibile utilizzare il componente TableAdapterManager introdotto in Visual Studio 2008.

In questa procedura dettagliata viene illustrato come salvare i dati correlati utilizzando 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, sono necessari gli elementi riportati di seguito:

Creazione dell'applicazione basata su Windows

Il primo passaggio di questa procedura dettagliata prevede la 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 scegliere OK. Per ulteriori informazioni, vedere Creazione di applicazioni per Windows.

    Il progetto HierarchicalUpdateWalkthrough viene creato e aggiunto in Esplora soluzioni.

Creazione del dataset

Poiché per illustrare gli aggiornamenti gerarchici sono necessarie le tabelle correlate, il passaggio successivo consiste nel creare un dataset contenente le tabelle Customers e Orders del database Northwind. Creare il dataset mediante la Configurazione guidata origine dati. Per creare la connessione è necessario disporre dell'accesso al database di esempio Northwind. Per informazioni sulla configurazione del 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 effettuare una delle seguenti operazioni:

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

      -oppure-

    • Fare clic su Nuova connessione per aprire la finestra di dialogo Aggiungi/Modifica connessione. Per ulteriori informazioni, vedere Finestra di dialogo Aggiungi/Modifica connessione (generale).

  5. Se il database richiede una password, selezionare l'opzione che consente di includere dati riservati, quindi scegliere 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 con associazione 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 ulteriori informazioni, vedere Procedura: impostare il controllo da creare per il trascinamento dalla finestra Origini dati.

    Nota:

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

Creazione del form con associazione a dati

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

Per creare i controlli con associazione 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 con associazione a dati e le etichette descrittive, insieme a un componente TableAdapterManager e a una barra degli strumenti (BindingNavigator) per spostarsi 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 spostarsi 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 dataset nel database chiamando il metodo TableAdapterManager.UpdateAll e passando il nome del dataset 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 Salva di BindingNavigator per salvare i dati dal dataset 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 con associazione a dati che si stanno modificando. Pertanto, se un controllo con associazione 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 analogo 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 dataset. In altre parole, potrebbe essere necessario aggiungere il nuovo record padre (Customer) al dataset affinché i vincoli di chiave esterna consentano l'aggiunta dei nuovi record figli (Orders) al dataset. A tale scopo, è possibile utilizzare l'evento figlio BindingSource.AddingNew.

Nota:

Il commit dei nuovi record padre dipende dal tipo di controllo utilizzato per eseguire l'associazione all'origine dati. In questa procedura dettagliata vengono utilizzati 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 EndEdit aggiuntiva per il record padre non è necessaria, perché la funzionalità di associazione dati sottostante del controllo gestisce l'esecuzione del commit dei nuovi record.

Per aggiungere il codice per eseguire il commit dei record padre nel dataset 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 analogo al seguente:

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

Verifica dell'attivazione degli aggiornamenti gerarchici

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

Per verificare l'attivazione degli aggiornamenti gerarchici

  1. Aprire il dataset in Progettazione DataSet facendo doppio clic sul file NorthwindDataSet.xsd 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 TableAdapterManager e con la logica per eseguire gli aggiornamenti gerarchici. Se si imposta HierarchicalUpdate su True viene generato un TableAdapterManager, mentre se si imposta su False non viene generato alcun TableAdapterManager.

Test 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 utilizzare 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 ulteriori 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)

Altre risorse

Aggiornamento gerarchico

Salvataggio di dati

DataSet, DataTable e DataView (ADO.NET)