Bagikan melalui


DataAdapter.AcceptChangesDuringUpdate Properti

Definisi

Mendapatkan atau mengatur apakah AcceptChanges() dipanggil selama Update(DataSet).

public:
 property bool AcceptChangesDuringUpdate { bool get(); void set(bool value); };
public bool AcceptChangesDuringUpdate { get; set; }
member this.AcceptChangesDuringUpdate : bool with get, set
Public Property AcceptChangesDuringUpdate As Boolean

Nilai Properti

true jika AcceptChanges() dipanggil selama Update(DataSet); jika tidak false. Default adalah true.

Contoh

Contoh ini menunjukkan mengekstrak baris yang diubah dari DataTabledan menggunakan SqlDataAdapter untuk memperbarui sumber data dan mengambil nilai kolom identitas baru. Dengan mengatur AcceptChangesDuringUpdate properti ke SqlDataAdapterfalse untuk mempertahankan nilai kenaikan otomatis asli, data baru kemudian dapat digabungkan ke dalam aslinya DataTable, bahkan jika nilai identitas baru tidak cocok dengan nilai kenaikan otomatis asli di DataTable.

private static void MergeIdentityColumns(string connectionString)
{
    using (SqlConnection connection =
               new SqlConnection(connectionString))
    {
        // Create the DataAdapter
        SqlDataAdapter adapter =
            new SqlDataAdapter(
            "SELECT ShipperID, CompanyName FROM dbo.Shippers",
            connection);

        //Add the InsertCommand to retrieve new identity value.
        adapter.InsertCommand = new SqlCommand(
            "INSERT INTO dbo.Shippers (CompanyName) " +
            "VALUES (@CompanyName); " +
            "SELECT ShipperID, CompanyName FROM dbo.Shippers " +
            "WHERE ShipperID = SCOPE_IDENTITY();", connection);

        // Set AcceptChangesDuringUpdate to false
        adapter.AcceptChangesDuringUpdate = false;

        // Add the parameter for the inserted value.
        adapter.InsertCommand.Parameters.Add(
           new SqlParameter("@CompanyName", SqlDbType.NVarChar, 40,
           "CompanyName"));
        adapter.InsertCommand.UpdatedRowSource = UpdateRowSource.Both;

        // MissingSchemaAction adds any missing schema to
        // the DataTable, including auto increment columns
        adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;

        // Fill a DataTable.
        DataTable shipper = new DataTable();
        adapter.Fill(shipper);

        // Add a new shipper row.
        DataRow newRow = shipper.NewRow();
        newRow["CompanyName"] = "New Shipper";
        shipper.Rows.Add(newRow);

        // Add changed rows to a new DataTable. This
        // DataTable will be used to update the data source.
        DataTable dataChanges = shipper.GetChanges();

        adapter.Update(dataChanges);
        connection.Close();

        Console.WriteLine("Rows after merge.");
        foreach (DataRow rowBefore in shipper.Rows)
        {
            {
                Console.WriteLine("{0}: {1}", rowBefore[0], rowBefore[1]);
            }
        }

        // Merge the two DataTables to get new values.
        shipper.Merge(dataChanges);

        // Commit the changes.
        shipper.AcceptChanges();

        Console.WriteLine("Rows after merge.");
        foreach (DataRow rowAfter in shipper.Rows)
        {
            {
                Console.WriteLine("{0}: {1}", rowAfter[0], rowAfter[1]);
            }
        }
    }
}
Private Sub MergeIdentityColumns(ByVal connectionString As String)

    Using connection As SqlConnection = New SqlConnection( _
       connectionString)

        ' Create the DataAdapter
        Dim adapter As SqlDataAdapter = New SqlDataAdapter( _
          "SELECT ShipperID, CompanyName FROM dbo.Shippers", connection)

        ' Add the InsertCommand to retrieve new identity value.
        adapter.InsertCommand = New SqlCommand( _
            "INSERT INTO dbo.Shippers (CompanyName) " & _
            "VALUES (@CompanyName); " & _
            "SELECT ShipperID, CompanyName FROM dbo.Shippers " & _
            "WHERE ShipperID = SCOPE_IDENTITY();", _
            connection)

        ' Set AcceptChangesDuringUpdate to false.
        adapter.AcceptChangesDuringUpdate = False

        ' Add the parameter for the inserted value.
        adapter.InsertCommand.Parameters.Add( _
           New SqlParameter("@CompanyName", SqlDbType.NVarChar, 40, _
           "CompanyName"))
        adapter.InsertCommand.UpdatedRowSource = _
           UpdateRowSource.FirstReturnedRecord

        ' MissingSchemaAction adds any missing schema to 
        ' the DataTable, including auto increment columns
        adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey

        ' Fill a DataTable.
        Dim shipper As New DataTable
        adapter.Fill(shipper)

        ' Add a new shipper row. 
        Dim newRow As DataRow = shipper.NewRow()
        newRow("CompanyName") = "New Shipper"
        shipper.Rows.Add(newRow)

        ' Add changed rows to a new DataTable. This
        ' DataTable will be used to update the data source.
        Dim dataChanges As DataTable = shipper.GetChanges()

        ' Update the data source with the modified records.
        adapter.Update(dataChanges)

        Console.WriteLine("Rows before merge.")
        Dim rowBefore As DataRow
        For Each rowBefore In shipper.Rows
            Console.WriteLine("{0}: {1}", rowBefore(0), rowBefore(1))
        Next

        ' Merge the two DataTables to get new values.
        shipper.Merge(dataChanges)

        ' Commit the changes.
        shipper.AcceptChanges()

        Console.WriteLine("Rows after merge.")
        Dim rowAfter As DataRow
        For Each rowAfter In shipper.Rows
            Console.WriteLine("{0}: {1}", rowAfter(0), rowAfter(1))
        Next
    End Using
End Sub

Keterangan

Selama panggilan ke Update metode DataAdapter, database dapat mengirim data kembali ke aplikasi ADO.NET Anda sebagai parameter output atau sebagai rekaman pertama yang dikembalikan dari kumpulan hasil. ADO.NET dapat mengambil nilai-nilai ini dan memperbarui kolom terkait dalam yang DataRow sedang diperbarui. Secara default, ADO.NET memanggil AcceptChanges metode DataRow setelah pembaruan. Namun, jika Anda ingin menggabungkan baris yang diperbarui kembali ke baris lain DataTable, Anda mungkin ingin mempertahankan nilai asli kolom kunci primer. Misalnya, kolom kunci primer yang sesuai dengan kolom yang bertambah secara otomatis dalam database, seperti kolom identitas, bisa berisi nilai baru yang ditetapkan oleh database yang tidak cocok dengan nilai asli yang ditetapkan di DataRow. Secara default, AcceptChanges dipanggil secara implisit setelah pembaruan, dan nilai asli dalam baris, yang mungkin memiliki AutoIncrement nilai yang ditetapkan oleh ADO.NET, hilang. Anda dapat mempertahankan nilai asli di dengan DataRow mencegah ADO.NET panggilan AcceptChanges setelah melakukan pembaruan pada baris, dengan mengatur AcceptChangesDuringUpdate properti ke false, yang mempertahankan nilai asli.

Catatan

AcceptChangesDuringUpdate Mengatur properti ke false berlaku untuk semua modifikasi data, tidak hanya sisipan. Jika Anda ingin mengedit atau menghapus baris dalam pembaruan yang sama, dan jika Anda ingin menekan panggilan hanya untuk AcceptChanges sisipan, maka alih-alih mengatur AcceptChangesDuringUpdate ke false, gunakan penanganan aktivitas untuk RowUpdated peristiwa DataAdapter. Di penanganan aktivitas, Anda dapat memeriksa StatementType untuk menentukan apakah modifikasi data adalah sisipan, dan jika true, atur Status properti dari RowUpdatedEventArgs ke SkipCurrentRow. Untuk mendapatkan informasi selengkapnya, lihat Mengambil Nilai Identitas atau Jumlah Otomatis.

Berlaku untuk

Lihat juga