Salvare i dati in un database (più tabelle) nelle applicazioni .NET Framework

Nota

I set di dati 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 applicazioni vengono disconnesse dal database. Sono particolarmente utili per le applicazioni che consentono agli utenti di modificare i dati e rendere persistenti le modifiche apportate al database. Anche se i set di dati hanno dimostrato di essere una tecnologia molto efficace, è consigliabile che le nuove applicazioni .NET usino Entity Framework Core. Entity Framework offre un modo più naturale per usare i dati tabulari come modelli a oggetti e ha un'interfaccia di programmazione più semplice.

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 le tabelle dalla finestra Origini dati in una maschera, il codice necessario per salvare i dati viene aggiunto automaticamente. Tutte le tabelle aggiuntive aggiunte a un modulo richiedono l'aggiunta manuale di questo codice. In questa procedura dettagliata viene descritto come aggiungere il codice per salvare gli aggiornamenti da più di una tabella.

Le attività illustrate nella procedura dettagliata sono le seguenti:

  • Creazione e configurazione di un'origine dati nell'applicazione con la Configurazione guidata origine dati.

  • Impostazione dei controlli degli elementi nella finestra Origini dati. Per altre informazioni, vedere Impostare il controllo da creare durante il trascinamento dalla finestra Origini dati.

  • Creazione di controlli associati a dati con il trascinamento di elementi dalla finestra Origini dati nel form.

  • Modifica di alcuni record in ogni tabella del set di dati.

  • Modifica del codice per inviare nuovamente al database i dati aggiornati nel set di dati.

Prerequisiti

Per completare questa esercitazione, sono necessari i carichi di lavoro sviluppo per desktop .NET e Archiviazione dati ed elaborazione dei dati installati in Visual Studio. Per installarli, aprire Programma di installazione di Visual Studio e scegliere Modifica (o Altro>modifica) accanto alla versione di Visual Studio da modificare. Vedere Modificare Visual Studio.

Questa procedura dettagliata usa sql Server Express Local DB e il database di esempio Northwind.

  1. Se SQL Server Express Local DB non è disponibile, installarlo dalla pagina di download di SQL Server Express o tramite il Programma di installazione di Visual Studio. Nella Programma di installazione di Visual Studio è possibile installare SQL Server Express Local DB come parte del carico di lavoro Archiviazione ed elaborazione dei dati o come singolo componente.

  2. Installare il database di esempio Northwind seguendo questa procedura:

    1. In Visual Studio aprire la finestra Esplora oggetti di SQL Server. SQL Server Esplora oggetti viene installato come parte del carico di lavoro Archiviazione ed elaborazione dei dati nel Programma di installazione di Visual Studio. Espandere il nodo SQL Server. Fare clic con il pulsante destro del mouse sull'istanza di Local DB e scegliere Nuova query.

      Verrà visualizzata una finestra dell'editor di query.

    2. Copiare lo script Transact-SQL Northwind negli Appunti. Questo script T-SQL crea il database Northwind da zero e lo popola con i dati.

    3. Incollare lo script T-SQL nell'editor di query e quindi scegliere il pulsante Esegui .

      Dopo un breve periodo di tempo, la query termina l'esecuzione e viene creato il database Northwind.

Creare l'applicazione Windows Form

Creare un nuovo progetto app Windows Form per C# o Visual Basic. Assegnare al progetto il nome UpdateMultipleTablesWalkthrough.

Creare l'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 sulla configurazione del database di esempio Northwind, vedere Procedura: Installare database di esempio.

  1. Scegliere Mostra origini dati dal menu Dati.

    Verrà visualizzata la finestra Origini dati.

  2. Nella finestra Origini dati selezionare Aggiungi nuova origine dati per avviare la Configurazione guidata origine dati.

  3. Nella schermata Scegliere un tipo di origine dati selezionare Database e quindi avanti.

  4. Nella schermata Scegliere i dati Connessione ion eseguire una delle operazioni seguenti:

    • Se nell'elenco a discesa è disponibile una connessione dati al database di esempio Northwind, selezionarla.

      oppure

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

  5. Se il database richiede una password, selezionare l'opzione per includere dati sensibili e quindi selezionare Avanti.

  6. Nel stringa di connessione Salva nel file di configurazione dell'applicazione selezionare Avanti.

  7. Nella schermata Scegliere gli oggetti di database espandere il nodo Tabelle .

  8. Selezionare le tabelle Clienti e Ordini e quindi selezionare Fine.

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

Impostare i controlli da creare

Per questa procedura dettagliata, i dati nella Customers tabella si trovano in un layout Dettagli in cui i dati vengono visualizzati in singoli controlli. I dati della Orders tabella si trovano in un layout grid visualizzato in un DataGridView controllo .

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

  1. Nella finestra Origini dati espandere il nodo Clienti.

  2. Nel nodo Clienti selezionare Dettagli dall'elenco di controlli per modificare il controllo della tabella Customers in singoli controlli. Per altre informazioni, vedere Impostare il controllo da creare durante il trascinamento dalla finestra Origini dati.

Creare il modulo associato a dati

È possibile creare i controlli associati a dati trascinando elementi dalla finestra Origini 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. Un oggetto NorthwindDataSet, CustomersTableAdapter, BindingSourcee BindingNavigator viene visualizzato nella barra dei componenti.

  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. Oggetto OrdersTableAdapter e BindingSource visualizzato nella barra dei componenti.

Aggiungere 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 diBindingNavigator viene aggiunto al codice del modulo per inviare aggiornamenti al database. Questa procedura modifica il codice per inviare gli aggiornamenti nell'ordine corretto. In questo modo si elimina la possibilità di generare 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 maggiore chiarezza, questa procedura dettagliata non usa una transazione. Tuttavia, se si aggiornano due o più tabelle correlate, includere tutta la logica di aggiornamento all'interno di una transazione. Una transazione è un processo che assicura che tutte le modifiche correlate a un database vengano eseguite correttamente prima del commit delle modifiche. Per altre informazioni, vedere Transazioni e concorrenza.

Per aggiungere la logica di aggiornamento all'applicazione

  1. Selezionare il pulsante Salva in BindingNavigator. Verrà aperto l'editor di codice al bindingNavigatorSaveItem_Click gestore eventi.

  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 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();
        }
    }
    

Testare l'applicazione

  1. Premere F5.

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

  3. Selezionare il pulsante Salva.

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