Condividi tramite


Procedura dettagliata: salvataggio di dati in un database (a più tabelle)

 

Data di pubblicazione: aprile 2016

Uno degli scenari più comuni nello sviluppo di applicazioni è la visualizzazione di dati in un form in un'applicazione Windows, la modifica dei dati e l'invio dei dati aggiornati al database. In questa procedura dettagliata viene creato un form in cui sono visualizzati i dati di due tabelle correlate e viene illustrato come modificare i record e salvare le modifiche nel database. Questo esempio usa le tabelle Customers e Orders del database di esempio Northwind.

È possibile salvare nel database i dati dell'applicazione chiamando il metodo Update di un oggetto TableAdapter. Quando si trascinano elementi dalla finestra Origini dati, il codice per salvare i dati viene automaticamente aggiunto per la prima tabella rilasciata in un form. Eventuali altre tabelle aggiunte a un form richiedono l'aggiunta manuale del codice necessario per salvare i dati. In questa procedura dettagliata viene descritto come aggiungere il codice per salvare gli aggiornamenti da più di una tabella.

Nota

Le finestre di dialogo e i comandi di menu visualizzati potrebbero essere diversi da quelli descritti nella Guida a seconda delle impostazioni attive o dell'edizione del programma. Per modificare le impostazioni, scegliere Importa/Esporta impostazioni dal menu Strumenti. Per altre informazioni, vedere Customizing Development Settings in Visual Studio.

Le attività illustrate nella procedura dettagliata sono le seguenti:

Prerequisiti

Per completare questa procedura dettagliata, è necessario:

Creazione dell'applicazione Windows

Il primo passaggio consiste nella creazione di un'applicazione Windows. L'assegnazione di un nome al progetto è facoltativa in questo passaggio, ma al progetto verrà ugualmente assegnato un nome per poterlo salvare in seguito.

Per creare il nuovo progetto Applicazione Windows

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

  2. Assegnare al progetto il nome UpdateMultipleTablesWalkthrough.

  3. Selezionare Applicazione Windows e fare clic su OK. Per altre informazioni, vedere Applicazioni client.

    Il progetto UpdateMultipleTablesWalkthrough viene creato e aggiunto in Esplora soluzioni.

Creazione dell'origine dati

Questo passaggio consente di creare un'origine dati dal database Northwind usando la Configurazione guidata origine dati. Per creare la connessione, è necessario avere accesso al database di esempio Northwind. Per informazioni sull'impostazione del database di esempio Northwind, vedere Procedura: installare database di esempio.

Per creare l'origine dati

  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. Selezionare Database nella pagina Scegliere un tipo di origine dati e scegliere Avanti.

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

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

      -oppure-

    • Selezionare Nuova connessione per aprire la finestra di dialogo Aggiungi/Modifica connessione.

  5. Se il database in uso richiede una password, selezionare l'opzione che consente di includere dati riservati, quindi scegliere Avanti.

  6. Nella pagina Salva stringa di connessione nel file di configurazione dell'applicazione fare clic su Avanti.

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

  8. Selezionare le tabelle Customers e Orders, quindi scegliere Fine.

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

Impostazione dei controlli da creare

Per questa procedura guidata i dati nella tabella Customers verranno visualizzati in singoli controlli nel layout Dettagli. I dati della tabella Orders verranno visualizzati in un controllo DataGridView nel layout Griglia.

Per impostare il tipo di visualizzazione degli elementi della finestra Origini dati

  1. Espandere il nodo Customers nella finestra Origini dati.

  2. Impostare il controllo della tabella Customers sui singoli controlli selezionando Dettagli nell'elenco dei controlli del nodo Customers. Per altre informazioni, vedere Impostare il controllo da creare durante il trascinamento dalla finestra Origini dati.

Creazione del form associato a dati

È possibile creare i controlli associati a dati trascinando elementi dalla finestra Origini dati nel form.

Per creare controlli associati a dati nel form

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

    Il form mostra i controlli associati a dati con etichette descrittive e un controllo Toolstrip (BindingNavigator) per lo spostamento all'interno dei record. Nella barra dei componenti vengono visualizzati gli oggetti NorthwindDataSet, CustomersTableAdapter, BindingSource e BindingNavigator.

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

    Nota

    Il nodo Orders correlato si trova sotto la colonna Fax ed è un nodo figlio del nodo Customers.

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

Aggiunta di codice per aggiornare il database

È possibile aggiornare il database chiamando i metodi Update degli oggetti TableAdapter Customers e Orders. Per impostazione predefinita, un gestore eventi per il pulsante Salva di BindingNavigator viene aggiunto al codice del form per inviare gli aggiornamenti al database. Questa procedura modifica tale codice per inviare gli aggiornamenti nell'ordine corretto ed eliminare così la possibilità di errori di integrità referenziale. Il codice implementa anche la gestione degli errori eseguendo il wrapping della chiamata di aggiornamento in un blocco try-catch. È possibile modificare il codice per soddisfare le esigenze dell'applicazione.

Nota

Per motivi di chiarezza, questa procedura guidata non usa una transazione, ma, se si devono aggiornare due o più tabelle correlate, è consigliabile includere tutta la logica di aggiornamento in un transazione. Una transazione è un processo che garantisce che tutte le modifiche correlate apportate a un database vengano completate prima di eseguire il commit delle modifiche. Per altre informazioni, vedere Transazioni e concorrenza.

Per aggiungere la logica di aggiornamento all'applicazione

  1. Fare doppio clic sul pulsante Salva in BindingNavigator per aprire l'editor del codice per il gestore eventi bindingNavigatorSaveItem_Click.

  2. Sostituire il codice nel gestore eventi per chiamare i metodi Update degli oggetti TableAdapter correlati. Il codice seguente crea innanzitutto tre tabelle dati temporanee in cui inserire le informazioni aggiornate per ogni DataRowState (Deleted, Added e Modified). Gli aggiornamenti vengono quindi eseguiti nell'ordine corretto. Il codice dovrebbe essere simile al seguente:

                this.Validate();
                this.ordersBindingSource.EndEdit();
                this.customersBindingSource.EndEdit();
    
                NorthwindDataSet.OrdersDataTable deletedOrders = (NorthwindDataSet.OrdersDataTable)
                    northwindDataSet.Orders.GetChanges(DataRowState.Deleted);
    
                NorthwindDataSet.OrdersDataTable newOrders = (NorthwindDataSet.OrdersDataTable)
                    northwindDataSet.Orders.GetChanges(DataRowState.Added);
    
                NorthwindDataSet.OrdersDataTable modifiedOrders = (NorthwindDataSet.OrdersDataTable)
                    northwindDataSet.Orders.GetChanges(DataRowState.Modified);
    
                try
                {
                    // Remove all deleted orders from the Orders table.
                    if (deletedOrders != null)
                    {
                        ordersTableAdapter.Update(deletedOrders);
                    }
    
                    // Update the Customers table.
                    customersTableAdapter.Update(northwindDataSet.Customers);
    
                    // Add new orders to the Orders table.
                    if (newOrders != null)
                    {
                        ordersTableAdapter.Update(newOrders);
                    }
    
                    // Update all modified Orders.
                    if (modifiedOrders != null)
                    {
                        ordersTableAdapter.Update(modifiedOrders);
                    }
    
                    northwindDataSet.AcceptChanges();
                }
    
                catch (System.Exception ex)
                {
                    MessageBox.Show("Update failed");
                }
    
                finally
                {
                    if (deletedOrders != null)
                    {
                        deletedOrders.Dispose();
                    }
                    if (newOrders != null)
                    {
                        newOrders.Dispose();
                    }
                    if (modifiedOrders != null)
                    {
                        modifiedOrders.Dispose();
                    }
                }
    
            Me.Validate()
            Me.OrdersBindingSource.EndEdit()
            Me.CustomersBindingSource.EndEdit()
    
            Dim deletedOrders As NorthwindDataSet.OrdersDataTable = CType(
                NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Deleted), NorthwindDataSet.OrdersDataTable)
    
            Dim newOrders As NorthwindDataSet.OrdersDataTable = CType(
                NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Added), NorthwindDataSet.OrdersDataTable)
    
            Dim modifiedOrders As NorthwindDataSet.OrdersDataTable = CType(
                NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Modified), NorthwindDataSet.OrdersDataTable)
    
    
            Try
                ' Remove all deleted orders from the Orders table.
                If Not deletedOrders Is Nothing Then
                    OrdersTableAdapter.Update(deletedOrders)
                End If
    
                ' Update the Customers table.
                CustomersTableAdapter.Update(NorthwindDataSet.Customers)
    
                ' Add new orders to the Orders table.
                If Not newOrders Is Nothing Then
                    OrdersTableAdapter.Update(newOrders)
                End If
    
                ' Update all modified Orders.
                If Not modifiedOrders Is Nothing Then
                    OrdersTableAdapter.Update(modifiedOrders)
                End If
    
                NorthwindDataSet.AcceptChanges()
    
            Catch ex As Exception
                MsgBox("Update failed")
    
            Finally
                If Not deletedOrders Is Nothing Then
                    deletedOrders.Dispose()
                End If
    
                If Not newOrders Is Nothing Then
                    newOrders.Dispose()
                End If
    
                If Not modifiedOrders Is Nothing Then
                    modifiedOrders.Dispose()
                End If
            End Try
    

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. Fare clic sul pulsante Salva.

  4. Controllare i valori presenti nel database per verificare che le modifiche siano state salvate.

Passaggi successivi

A seconda dei requisiti dell'applicazione, si potranno eseguire diverse operazioni una volta terminata la creazione di un form associato a dati nell'applicazione Windows. È possibile apportare alcuni miglioramenti a questa procedura dettagliata, tra cui:

Vedere anche

Procedure dettagliate relative ai dati
Associazione di controlli Windows Form ai dati in Visual Studio
Cenni preliminari sulle applicazioni dati in Visual Studio
Connessione ai dati in Visual Studio
Preparazione dell'applicazione al ricevimento di dati
Recupero di dati nell'applicazione
Associazione di controlli ai dati in Visual Studio
Modifica di dati nell'applicazione
Convalida dei dati
Salvataggio di dati