Aracılığıyla paylaş


Nasıl yapılır: Dataset değişikliklerini veritabanına Kaydet

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 veya veri bağdaştırıcısı. Bağdaştırıcının Update yöntemi bir tek veri tablosunu güncelleştirir ve temel doğru komut (INSERT, update veya delete) yürüten RowState , her veri satırı tablosundaki.

İlgili tablolarda veri kaydederken, Visual Studio veritabanı içinde tanımlanan yabancı anahtar kısıtlamalarını temel doğru sırada kaydeder gerçekleştirmede yardımcı olur bir TableAdapterManager bileşeni sağlar. Daha fazla bilgi için bkz. Hiyerarşik Update genel bakış.

Not

Bağdaştırıcının çağıran kodun bir dataset içeriğini bir veri kaynağını güncelleştirmek çalışırken hatalara neden olabilir çünkü koyun Update yöntemi içinde bir try/catch blok.

Veri kaynağını güncelleştirmek için aynı yordamın iş gereksinimlerinize göre değişebilir, ancak aşağıdaki adımları uygulamanız içermelidir:

  1. Veritabanı içinde güncelleştirmeleri gönderme girişimleri kod yürütmesine 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: hata bulunan satırları bulun.

  3. Veri sorunu mutabakat (programlı olarak mümkün değilse, 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 özelliği, GetErrors yöntemi).

Bir veritabanına veri kaydetme

Call Update yöntemi, veri tablosunun adını geçirerek bir TableAdapter veya veri bağdaştırıcısı, veritabanına yazılması için değerleri içerir. Tek veri tablosundan verileri bir veritabanına kaydetme hakkında daha fazla bilgi için bkz: İzlenecek yol: Bir veritabanı (tek tablo) verilerini kaydetme.

Bir TableAdapter kullanarak bir dataset ile bir veritabanını güncelleştirme

  • İçine TableAdapter.Update yönteminin içine bir try/catch blok. Nasıl içeriğiyle ilgili bir güncelleştirme denemesi aşağıdaki örnekte gösterilmektedir 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");
    }
    

Bir veritabanına veri bağdaştırıcısı kullanarak bir dataset ile güncelleştirmek için

  • İçine DataAdapter.Update yönteminin içine bir try/catch blok. Nasıl içeriğini içeren bir veri kaynağı için bir güncelleştirme girişimi aşağıdaki örnekte gösterilmektedir Table1 , DataSet1.

    Try
        SqlDataAdapter1.Update(Dataset1.Tables("Table1"))
    
    Catch x As Exception
        ' Error during Update, add code to locate error, reconcile 
        ' and try to update again.
    End Try
    
    try
    {
        SqlDataAdapter1.Update(Dataset1.Tables["Table1"]);
    }
    catch (Exception e)
    {
        // Error during Update, add code to locate error, reconcile 
        // and try to update again.
    }
    

Dataset içindeki iki ilişkili tablonun güncelleştiriliyor

Bir dataset içindeki ilgili tablolarını güncelleştirirken başvurusal bütünlük kısıtlamalarını ihlal etme olasılığını azaltmak için doğru sırada güncelleştirmek önemlidir. 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.

Birden çok tablodan gelen verileri kaydetme ile ilgili ayrıntılı bilgi için bkz: İzlenecek yol: Bir veritabanı (birden çok tabloları) verilerini kaydetme.

İki veya daha fazla ilişkili tabloları güncelleştiriyorsanız, işlem içindeki tüm güncelleştirme mantığı eklemeniz gerekir. Bir hareket, herhangi bir değişiklik yapılıyor önce tüm ilgili değişiklikleri veritabanına başarılı olmasını sağlar bir işlemdir. Daha fazla bilgi için bkz. Performing Transactions.

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

  1. Üç geçici oluşturmak DataTables farklı kayıtları tutmak için.

  2. Call Update yöntemi her alt içinden satır kümesi için bir try/catch blok. Güncelleştirme hataları oluşursa, şube ve bunları çözmek için önerilen eylem olur.

  3. Değişiklikleri veritabanına dataset nesnesinden uygulayın.

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

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

İki ilişkili tablonun veri bağdaştırıcısı kullanarak güncelleştirmek için

  • Call Update yöntemi, her veri bağdaştırıcısı.

    Aşağıdaki örnek, ilişkili tabloları içeren bir dataset ile bir veri kaynağını güncelleştirmek gösterilmiştir. Yukarıdaki üç geçici sırasının gelmesini DataTables oluşturulan farklı kayıtları tutmak için. Sonra Update yöntemi adlı için her alt satır kümesi içinden bir try/catch blok. Güncelleştirme hataları oluşursa, şube ve bunları çözmek için önerilen eylem olur. Daha sonra DataSet'i değişiklikleri kaydeder. Son olarak, kaynakları serbest bırakmak için geçici veri tablolarından atın.

    Private Sub UpdateDB()
        Dim DeletedChildRecords As DataTable =
            dsNorthwind1.Orders.GetChanges(DataRowState.Deleted)
    
        Dim NewChildRecords As DataTable =
            dsNorthwind1.Orders.GetChanges(DataRowState.Added)
    
        Dim ModifiedChildRecords As DataTable =
            dsNorthwind1.Orders.GetChanges(DataRowState.Modified)
    
        Try
            If Not DeletedChildRecords Is Nothing Then
                daOrders.Update(DeletedChildRecords)
            End If
    
            daCustomers.Update(dsNorthwind1, "Customers")
    
            If Not NewChildRecords Is Nothing Then
                daOrders.Update(NewChildRecords)
            End If
    
            If Not ModifiedChildRecords Is Nothing Then
                daOrders.Update(ModifiedChildRecords)
            End If
    
            dsNorthwind1.AcceptChanges()
    
        Catch ex As Exception
            ' Update error, resolve and try again
    
        Finally
            If Not DeletedChildRecords Is Nothing Then
                DeletedChildRecords.Dispose()
            End If
    
            If Not NewChildRecords Is Nothing Then
                NewChildRecords.Dispose()
            End If
    
            If Not ModifiedChildRecords Is Nothing Then
                ModifiedChildRecords.Dispose()
            End If
        End Try
    End Sub
    
    void UpdateDB()
    {
        System.Data.DataTable DeletedChildRecords = 
            dsNorthwind1.Orders.GetChanges(System.Data.DataRowState.Deleted);
    
        System.Data.DataTable NewChildRecords = 
            dsNorthwind1.Orders.GetChanges(System.Data.DataRowState.Added);
    
        System.Data.DataTable ModifiedChildRecords = 
            dsNorthwind1.Orders.GetChanges(System.Data.DataRowState.Modified);
    
        try
        {
            if (DeletedChildRecords != null)
            {
                daOrders.Update(DeletedChildRecords);
            }
            if (NewChildRecords != null)
            {
                daOrders.Update(NewChildRecords);
            }
            if (ModifiedChildRecords != null)
            {
                daOrders.Update(ModifiedChildRecords);
            }
    
            dsNorthwind1.AcceptChanges();
        }
    
        catch (Exception ex)
        {
            // Update error, resolve and try again
        }
    
        finally
        {
            if (DeletedChildRecords != null)
            {
                DeletedChildRecords.Dispose();
            }
            if (NewChildRecords != null)
            {
                NewChildRecords.Dispose();
            }
            if (ModifiedChildRecords != null)
            {
                ModifiedChildRecords.Dispose();
            }
        }
    }
    

Ayrıca bkz.

Kavramlar

Visual Studio 2012'deki Veri Uygulaması Geliştirme Yenilikleri

Windows Forms denetimleri Visual Studio veri bağlama

Uygulamanız veri almaya hazırlanıyor

Uygulama veri getiriliyor

Visual Studio veri denetimleri

Uygulamanızın veri düzenleme

Veri doğrulama

Verileri kaydetme

Diğer Kaynaklar

Veri Talimatları

Visual Studio verilere bağlanma