Procedura dettagliata: Salvare i dati in una transazione 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.

Questa procedura dettagliata illustra come salvare i dati in una transazione usando lo spazio dei System.Transactions nomi . In questa procedura dettagliata si creerà un'applicazione Windows Form. Si userà la Configurazione guidata origine dati per creare un set di dati per due tabelle nel database di esempio Northwind. Si aggiungeranno controlli associati a dati a un Windows Form e si modificherà il codice per il pulsante di salvataggio di BindingNavigator per aggiornare il database all'interno di TransactionScope.

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 sviluppo di applicazioni desktop .NET 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 un'applicazione Windows Forms Application

Il primo passaggio consiste nel creare un'app Windows Form (.NET Framework).

  1. Nel menu File in Visual Studio selezionare Nuovo>Progetto.

  2. Espandere Visual C# o Visual Basic nel riquadro a sinistra, quindi selezionare Desktop di Windows.

  3. Nel riquadro centrale selezionare il tipo di progetto Windows Form app.

  4. Assegnare al progetto il nome SavingDataInATransactionWalkthrough e quindi scegliere OK.

    Il progetto SavingDataInATransactionWalkthrough viene creato e aggiunto a Esplora soluzioni.

Creare un'origine dati del database

Questo passaggio usa la Configurazione guidata origine dati per creare un'origine dati basata sulle Customers tabelle e Orders nel database di esempio Northwind.

  1. Per aprire la finestra Origini dati, scegliere Mostra origini dati dal menu 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 avviare la finestra di dialogo Aggiungi/Modifica connessione e creare una connessione al database Northwind.
  5. Se il database richiede una password, selezionare l'opzione per includere dati sensibili e quindi selezionare Avanti.

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

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

  8. Selezionare le Customers tabelle e Orders e quindi selezionare Fine.

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

Aggiungere controlli al modulo

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

  1. Nella finestra Origini dati espandere il nodo Clienti.

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

    Nel form vengono visualizzati un controllo DataGridView e un controllo ToolStrip (BindingNavigator) per lo spostamento all'interno dei record. Un oggetto NorthwindDataSet, CustomersTableAdapter, BindingSourcee BindingNavigator viene visualizzato nella barra dei componenti.

  3. Trascinare il nodo Ordini correlato (non il nodo Ordini principale, ma il nodo tabella figlio correlato sotto la colonna Fax) nel form sotto CustomersDataGridView.

    Nel form verrà visualizzato un oggetto DataGridView. Oggetto OrdersTableAdapter e BindingSource visualizzato nella barra dei componenti.

Aggiungere un riferimento all'assembly System.Transactions

Le transazioni usano lo spazio dei nomi System.Transactions. Un riferimento di progetto all'assembly system.transactions non viene aggiunto per impostazione predefinita. Pertanto, è necessario aggiungerlo manualmente.

Per aggiungere un riferimento al file DLL System.Transactions.

  1. Scegliere Aggiungi riferimento dal menu Progetto.

  2. Selezionare System.Transactions (nella .NET scheda) e quindi selezionare OK.

    Al progetto viene aggiunto un riferimento a System.Transactions.

Modificare il codice nel pulsante SaveItem di BindingNavigator

Per la prima tabella eliminata nel modulo, il codice viene aggiunto per impostazione predefinita all'evento click del pulsante salva in BindingNavigator. È necessario aggiungere manualmente il codice per aggiornare eventuali tabelle aggiuntive. Per questa procedura dettagliata, viene eseguito il refactoring del codice di salvataggio esistente dal gestore eventi click del pulsante di salvataggio. Vengono inoltre creati altri metodi per fornire funzionalità di aggiornamento specifiche in base al fatto che la riga debba essere aggiunta o eliminata.

Per modificare il codice di salvataggio autogenerato

  1. Selezionare il pulsante Salva in CustomersBindingNavigator (il pulsante con l'icona del disco floppy).

  2. Sostituire il metodo CustomersBindingNavigatorSaveItem_Click con il codice seguente:

    private void customersBindingNavigatorSaveItem_Click(object sender, EventArgs e)
    {
        UpdateData();
    }
    
    private void UpdateData()
    {
        this.Validate();
        this.customersBindingSource.EndEdit();
        this.ordersBindingSource.EndEdit();
    
        using (System.Transactions.TransactionScope updateTransaction = 
            new System.Transactions.TransactionScope())
        {
            DeleteOrders();
            DeleteCustomers();
            AddNewCustomers();
            AddNewOrders();
    
            updateTransaction.Complete();
            northwindDataSet.AcceptChanges();
        }
    }
    

L'ordine di riconciliazione delle modifiche ai dati correlati è il seguente:

  • Eliminare i record figlio. In questo caso, eliminare i record dalla Orders tabella.

  • Eliminare i record padre. In questo caso, eliminare i record dalla Customers tabella.

  • Inserire record padre. In questo caso, inserire i record nella Customers tabella.

  • Inserire record figlio. In questo caso, inserire i record nella Orders tabella.

Per eliminare gli ordini esistenti

  • Aggiungere il metodo DeleteOrders seguente in Form1:

    private void DeleteOrders()
    {
        NorthwindDataSet.OrdersDataTable deletedOrders;
        deletedOrders = (NorthwindDataSet.OrdersDataTable)
            northwindDataSet.Orders.GetChanges(DataRowState.Deleted);
    
        if (deletedOrders != null)
        {
            try
            {
                ordersTableAdapter.Update(deletedOrders);
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("DeleteOrders Failed");
            }
        }
    }
    

Per eliminare i clienti esistenti

  • Aggiungere il metodo DeleteCustomers seguente in Form1:

    private void DeleteCustomers()
    {
        NorthwindDataSet.CustomersDataTable deletedCustomers;
        deletedCustomers = (NorthwindDataSet.CustomersDataTable)
            northwindDataSet.Customers.GetChanges(DataRowState.Deleted);
    
        if (deletedCustomers != null)
        {
            try
            {
                customersTableAdapter.Update(deletedCustomers);
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("DeleteCustomers Failed");
            }
        }
    }
    

Per aggiungere nuovi clienti

  • Aggiungere il metodo AddNewCustomers seguente in Form1:

    private void AddNewCustomers()
    {
        NorthwindDataSet.CustomersDataTable newCustomers;
        newCustomers = (NorthwindDataSet.CustomersDataTable)
            northwindDataSet.Customers.GetChanges(DataRowState.Added);
    
        if (newCustomers != null)
        {
            try
            {
                customersTableAdapter.Update(newCustomers);
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("AddNewCustomers Failed");
            }
        }
    }
    

Per aggiungere nuovi ordini

  • Aggiungere il metodo AddNewOrders seguente in Form1:

    private void AddNewOrders()
    {
        NorthwindDataSet.OrdersDataTable newOrders;
        newOrders = (NorthwindDataSet.OrdersDataTable)
            northwindDataSet.Orders.GetChanges(DataRowState.Added);
    
        if (newOrders != null)
        {
            try
            {
                ordersTableAdapter.Update(newOrders);
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("AddNewOrders Failed");
            }
        }
    }
    

Eseguire l'applicazione

Premere F5 per eseguire l'applicazione.