Nasıl yapılır: TableAdapter Kullanarak Veri Güncelleştirme

Sizin DataSet'teki verileri değiştiren ve doğrulanmış sonra büyük olasılıkla güncelleştirilmiş verileri bir veritabanına geri göndermek istiyorsunuz.Değiştirilmiş verileri bir veritabanına göndermek için arama Update yöntemi bir TableAdapter.Bağdaştırıcının Update yöntemi bir tek veri tablosunu güncelleştirmek ve temel doğru (INSERT, update veya delete) bağlamını RowState , her veri satırı tablosundaki.İlgili tablolarda veri kaydettiğinizde, Visual Studio veritabanı içinde tanımlanan yabancı anahtar kısıtlamalarını temel doğru düzende kaydeder gerçekleştirmede yardımcı olur bir TableAdapterManager bileşeni sağlar.Daha fazla bilgi için bkz. Hiyerarşik Güncelleştirmeye Genel Bakış.

[!NOT]

Veri kaynağı bir dataset içeriğini güncelleştirirken hata neden olabileceğinden, bağdaştırıcının çağıran kodunu yerleştirmeniz gereken Update yönteminin içine bir try/catch blok.

Veri kaynağını güncelleştirmek için aynı yordamın iş gereksinimlerine bağlı olarak değişebilir, ancak aşağıdaki adımları uygulamanız içermelidir:

  1. Bağdaştırıcının çağrısı Update yöntemi bir try/catch blok.

  2. Bir özel durum yakalandı, hataya neden olan veri satırı bulun.Daha fazla bilgi için bkz. Nasıl yapılır: Hatalar İçeren Satırların Konumunu Bulma.

  3. Veri sorunu mutabakat (programlama yapabiliyorsanız, veya geçersiz satır değişikliği kullanıcıya sunmak) simgesini tıklatın ve ardından güncelleştirmeyi deneyin (HasErrors, GetErrors).

Bir veritabanına veri kaydetme

Call Update bir TableAdapter yöntemi, veri tablosunun adını geçirmeden veritabanına yazılması için değerleri içerir.

Bir TableAdapter kullanarak bir dataset olan veritabanını güncelleştirmek için

  • Bağdaştırıcının içine Update yöntemi bir try/catch blok.Nasıl içinden bir güncelleştirme denemesi aşağıdaki örnekte gösterilmektedir bir try/catch blok içeriğiyle Customers , tablo NorthwindDataSet.

    Try 
        Me.Validate()
        Me.CustomersBindingSource.EndEdit()
        Me.CustomersTableAdapter.Update(Me.NorthwindDataSet.Customers)
        MsgBox("Update successful")
    
    Catch ex As Exception
        MsgBox("Update failed")
    End Try
    
    try
    {
        this.Validate();
        this.customersBindingSource.EndEdit();
        this.customersTableAdapter.Update(this.northwindDataSet.Customers);
        MessageBox.Show("Update successful");
    }
    catch (System.Exception ex)
    {
        MessageBox.Show("Update failed");
    }
    

Dataset içindeki iki ilişkili tablonun birTableAdapter ile güncelleştirme

Bir dataset içindeki ilgili tablolara güncelleştirdiğinizde, bilgi tutarlılığı kısıtlamaları ihlal etme olasılığını azaltmak için doğru sırada güncelleştirmeniz gerekir.Komut yürütme sırasını, indices takip edecek DataRowCollection DataSet.Veri tutarlılığı hataları artırılmasını engellemek için aþaðýdaki sýrada veritabanýný güncelleþtirmek için en iyi yöntem olacaktır:

  1. Alt tablo: kayıtları silme.

  2. Üst Tablo: ekleme, güncelleştirme ve kayıtlarını silmek.

  3. Alt tablo: ekleme ve kayıtları güncelleştirmek.

    [!NOT]

    İki güncelleştirmekte olduğunuz veya daha fazla ilişkili tablolar, işlem içindeki tüm güncelleştirme mantığı eklemeniz gerekir.Bir hareket, bir veritabanındaki tüm ilgili değişiklikler herhangi bir değişiklik yapılıyor önce başarılı olmalarını bir işlemdir.Daha fazla bilgi için bkz. Transactions and Concurrency.

İki ilişkili tablonun bir TableAdapter kullanarak güncelleştirmek için

  1. Farklı kayıtları tutmak için üç geçici tablolar oluşturun.

  2. Call Update yöntemi her alt satırları kümesi için bir try/catch blok.Güncelleştirme hataları oluşursa, şube ve çözümleyin.

  3. Veritabanı değişiklikleri uygulayın.

  4. Kaynakları serbest bırakmak için geçici tablolar çöpe atın.

    Aşağıdaki örnek, ilişkili tabloları içeren bir dataset ile bir veri kaynağını güncelleştirmek gösterilmiştir.

    Private Sub UpdateDB()
        Dim deletedChildRecords As NorthwindDataSet.OrdersDataTable =
            CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Deleted), NorthwindDataSet.OrdersDataTable)
    
        Dim newChildRecords As NorthwindDataSet.OrdersDataTable =
            CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Added), NorthwindDataSet.OrdersDataTable)
    
        Dim modifiedChildRecords As NorthwindDataSet.OrdersDataTable =
            CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Modified), NorthwindDataSet.OrdersDataTable)
    
        Try 
            If deletedChildRecords IsNot Nothing Then
                OrdersTableAdapter.Update(deletedChildRecords)
            End If
    
            CustomersTableAdapter.Update(NorthwindDataSet.Customers)
    
            If newChildRecords IsNot Nothing Then
                OrdersTableAdapter.Update(newChildRecords)
            End If 
    
            If modifiedChildRecords IsNot Nothing Then
                OrdersTableAdapter.Update(modifiedChildRecords)
            End If
    
            NorthwindDataSet.AcceptChanges()
    
        Catch ex As Exception
            MessageBox.Show("An error occurred during the update process")
            ' Add code to handle error here. 
    
        Finally 
            If deletedChildRecords IsNot Nothing Then
                deletedChildRecords.Dispose()
            End If 
    
            If newChildRecords IsNot Nothing Then
                newChildRecords.Dispose()
            End If 
    
            If modifiedChildRecords IsNot Nothing Then
                modifiedChildRecords.Dispose()
            End If 
    
        End Try 
    End Sub
    
    void UpdateDB()
    {
        NorthwindDataSet.OrdersDataTable deletedChildRecords = 
            (NorthwindDataSet.OrdersDataTable)northwindDataSet.Orders.GetChanges(DataRowState.Deleted);
    
        NorthwindDataSet.OrdersDataTable newChildRecords = 
            (NorthwindDataSet.OrdersDataTable)northwindDataSet.Orders.GetChanges(DataRowState.Added);
    
        NorthwindDataSet.OrdersDataTable modifiedChildRecords = 
            (NorthwindDataSet.OrdersDataTable)northwindDataSet.Orders.GetChanges(DataRowState.Modified);
    
        try
        {
            if (deletedChildRecords != null)
            {
                ordersTableAdapter.Update(deletedChildRecords);
            }
    
            customersTableAdapter.Update(northwindDataSet.Customers);
    
            if (newChildRecords != null)
            {
                ordersTableAdapter.Update(newChildRecords);
            }
    
            if (modifiedChildRecords != null)
            {
                ordersTableAdapter.Update(modifiedChildRecords);
            }
    
            northwindDataSet.AcceptChanges();
        }
    
        catch (Exception ex)
        {
            MessageBox.Show("An error occurred during the update process");
            // Add code to handle error here.
        }
    
        finally
        {
            if (deletedChildRecords != null)
            {
                deletedChildRecords.Dispose();
            }
            if (newChildRecords != null)
            {
                newChildRecords.Dispose();
            }
            if (modifiedChildRecords != null)
            {
                modifiedChildRecords.Dispose();
            }
        }
    }
    

Ayrıca bkz.

Kavramlar

TableAdapter Genel Bakışı

Visual Studio'da Verilere Windows Forms Denetimleri Bağlama

Uygulamanızı Veri Almaya Hazırlama

Uygulamanıza Veri Getirme

Visual Studio'da Verilere Denetimler Bağlama

Uygulamanızdaki Verileri Düzenleme

Verileri Doğrulama

Verileri Kaydetme

Diğer Kaynaklar

Veri İzlenecek Yollar

Visual Studio'da Verilere Bağlanma