Bagikan melalui


Panduan: Menyimpan data dalam transaksi dalam aplikasi .NET Framework

Catatan

Himpunan data dan kelas terkait adalah teknologi .NET Framework warisan dari awal 2000-an yang memungkinkan aplikasi untuk bekerja dengan data dalam memori saat aplikasi terputus dari database. Himpunan data tersebut sangat berguna untuk aplikasi yang mengaktifkan pengguna guna memodifikasi data dan mempertahankan perubahan kembali ke database. Meskipun himpunan data telah terbukti menjadi teknologi yang sangat sukses, sebaiknya aplikasi .NET baru menggunakan Entity Framework Core. Entity Framework menyediakan cara yang lebih alami untuk bekerja dengan data tabular sebagai model objek, dan memiliki antarmuka pemrograman yang lebih sederhana.

Panduan ini menunjukkan cara menyimpan data dalam transaksi dengan menggunakan namespace layanan System.Transactions. Dalam panduan ini, Anda akan membuat aplikasi Formulir Windows. Anda akan menggunakan Panduan Konfigurasi Sumber Data untuk membuat himpunan data untuk dua tabel dalam database sampel Northwind. Anda akan menambahkan kontrol terikat data ke formulir Windows, dan Anda akan memodifikasi kode untuk tombol simpan BindingNavigator untuk memperbarui database di dalam TransactionScope.

Prasyarat

Untuk menyelesaikan tutorial ini, Anda memerlukan beban kerja pengembangan desktop .NET dan Penyimpanan data dan pemrosesan yang diinstal di Visual Studio. Untuk menginstalnya, buka penginstal Visual Studio, lalu pilih Ubah(atau Lebih> Ubah) di samping versi Visual Studio yang ingin Anda ubah. Lihat Ubah Visual Studio.

Panduan ini menggunakan SQL Server Express LocalDB dan database sampel Northwind.

  1. Jika Anda tidak memiliki SQL Server Express LocalDB, pasang dari halaman unduhan SQL Server Express, atau melalui Alat Penginstal Visual Studio. Di Alat Penginstal Visual Studio, SQL Server Express LocalDB dapat diinstal sebagai bagian dari beban kerja pengembangan desktop .NET, atau sebagai komponen individual.

  2. Instal database sampel Northwind dengan mengikuti langkah-langkah berikut:

    1. Di Visual Studio, buka jendela SQL Server Object Explorer. (SQL Server Object Explorer dipasang sebagai bagian dari beban kerja Penyimpanan dan pemrosesan data di Alat Penginstal Visual Studio.) Perluas node SQL Server. Klik kanan pada instans LocalDB Anda dan pilih Kueri Baru.

      Jendela editor kueri terbuka.

    2. Salin skrip Northwind Transact-SQL ke clipboard Anda. Skrip T-SQL ini membuat database Northwind dari awal dan mengisinya dengan data.

    3. Tempelkan skrip T-SQL ke editor kueri, lalu pilih tombol Jalankan.

      Setelah beberapa saat, kueri selesai berjalan dan database Northwind dibuat.

Membuat aplikasi Formulir Windows

Langkah pertama adalah membuat Aplikasi Formulir Windows (.NET Framework).

  1. Di Visual Studio, di menu File, pilih Proyek>Baru.

  2. Perluas Visual C# atau Visual Basic di panel sebelah kiri, lalu pilih Windows Desktop.

  3. Di panel tengah, pilih jenis proyek Aplikasi Formulir Windows.

  4. Beri nama proyek SavingDataInATransactionWalkthrough, lalu pilih OK.

    Proyek SavingDataInATransactionWalkthrough dibuat dan ditambahkan ke Penjelajah Solusi.

Untuk membuat sumber data

Langkah ini menggunakan Wizard Konfigurasi Sumber Data untuk membuat sumber data berdasarkan tabel Customers dan Orders dalam database sampel Northwind.

  1. Untuk membuka jendela Sumber Data, pada menu Data, pilih Perlihatkan Sumber Data.

  2. Di jendela Sumber Data, pilih Tambahkan Sumber Data Baru untuk memulai Wizard Konfigurasi Sumber Data.

  3. Pada layar Pilih Jenis Sumber Data, pilih Database, lalu pilih Berikutnya.

  4. Pada layar Pilih Koneksi Data Anda lakukan salah satu hal berikut ini:

    • Jika koneksi data ke database sampel Northwind tersedia di daftar dropdown, pilihlah.

      -atau-

    • Pilih Koneksi Baru untuk meluncurkan kotak dialog Tambahkan/Ubah Koneksi dan buat koneksi ke database Northwind.

  5. Jika database Anda memerlukan kata sandi, pilih opsi untuk menyertakan data sensitif, lalu pilih Berikutnya.

  6. Pada layar Simpan string koneksi ke file Konfigurasi Aplikasi, pilih Berikutnya.

  7. Pada layar Pilih Objek Database Anda, perluas node Tabel.

  8. Pilih tabel Customers dan Orders, lalu pilih Selesai.

    NorthwindDataSet ditambahkan ke proyek Anda dan tabel Customers dan Orders muncul di jendela Sumber Data.

Menambahkan kontrol ke formulir

Anda dapat membuat kontrol terikat data dengan menyeret item dari jendela Sumber Data ke formulir Anda.

  1. Di jendela Sumber Data, perluas simpul Pelanggan.

  2. Seret node Pelanggan utama dari jendela Sumber Data ke Form1.

    Kontrol DataGridView dan strip alat (BindingNavigator) untuk menavigasi rekaman muncul di formulir. NorthwindDataSet, CustomersTableAdapter, BindingSource, dan BindingNavigator muncul di baki komponen.

  3. Seret node Pesanan terkait (bukan node Pesanan utama, tetapi node tabel turunan terkait di bawah kolom Faks) ke formulir di bawah CustomersDataGridView.

    Muncul DataGridView pada formulir. OrdersTableAdapter dan BindingSource muncul di penampan komponen.

Menambahkan referensi ke rakitan System.Transactions

Transaksi menggunakan System.Transactions namespace layanan. Referensi proyek ke rakitan system.transactions tidak ditambahkan secara default, jadi Anda perlu menambahkannya secara manual.

Untuk menambahkan referensi ke file DLL System.Transactions

  1. Pada menu Proyek, pilih Tambahkan Referensi.

  2. Pilih System.Transactions (pada .NET tab), lalu pilih OK.

    Referensi ke System.Transactions ditambahkan ke proyek.

Ubah kode di tombol SaveItem BindingNavigator

Untuk tabel pertama yang dijatuhkan ke formulir Anda, kode ditambahkan secara default ke click peristiwa tombol simpan pada BindingNavigator. Anda perlu menambahkan kode secara manual untuk memperbarui tabel tambahan apa pun. Untuk panduan ini, kami merefaktor kode penyimpanan yang ada dari penangan aktivitas klik tombol simpan. Kami juga membuat beberapa metode lagi untuk menyediakan fungsionalitas pembaruan tertentu berdasarkan apakah baris perlu ditambahkan atau dihapus.

Untuk mengubah kode penyimpanan yang dibuat secara otomatis

  1. Pilih tombol Simpan pada CustomersBindingNavigator (tombol dengan ikon disket).

  2. Ganti metode CustomersBindingNavigatorSaveItem_Click dengan kode berikut:

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

Urutan untuk menyesuaikan perubahan pada data terkait adalah sebagai berikut:

  • Menghapus catatan turunan. (Dalam hal ini, hapus rekaman dari tabel Orders.)

  • Menghapus rekaman induk. (Dalam hal ini, hapus rekaman dari tabel Customers.)

  • Sisipkan rekaman induk. (Dalam hal ini, sisipkan rekaman dalam tabel Customers.)

  • Sisipkan rekaman turunan. (Dalam hal ini, sisipkan rekaman dalam tabel Orders.)

Untuk menghapus pesanan yang sudah ada

  • Menambahkan metode DeleteOrders berikut ke 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");
            }
        }
    }
    

Untuk menghapus pelanggan yang sudah ada

  • Menambahkan metode DeleteCustomers berikut ke 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");
            }
        }
    }
    

Untuk menambahkan pelanggan baru

  • Menambahkan metode AddNewCustomers berikut ke 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");
            }
        }
    }
    

Untuk menambahkan pesanan baru

  • Menambahkan metode AddNewOrders berikut ke 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");
            }
        }
    }
    

Jalankan aplikasi

Tekan F5 untuk menjalankan aplikasi.