Sdílet prostřednictvím


DataAdapter.AcceptChangesDuringUpdate Vlastnost

Definice

Získá nebo nastaví, zda AcceptChanges() je volána Update(DataSet)během .

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

Hodnota vlastnosti

true if AcceptChanges() je volána během ; Update(DataSet)jinak false. Výchozí formát je true.

Příklady

Tento příklad ukazuje extrahování změněného řádku z DataTable a použití SqlDataAdapter k aktualizaci zdroje dat a načtení nové hodnoty sloupce identity. Nastavením AcceptChangesDuringUpdate vlastnosti na pro false zachování původní hodnoty automatického SqlDataAdapter přírůstku lze nová data sloučit s původní DataTablehodnotou , a to i v případě, že nová hodnota identity neodpovídá původní hodnotě automatického přírůstku v objektu 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

Poznámky

Během volání Update metody DataAdaptermůže databáze odesílat data zpět do aplikace ADO.NET jako výstupní parametry nebo jako první vrácený záznam sady výsledků dotazu. ADO.NET tyto hodnoty načíst a aktualizovat odpovídající sloupce v právě aktualizovaném DataRow stavu. Ve výchozím nastavení ADO.NET volá AcceptChanges po aktualizaci metodu DataRow . Pokud však chcete sloučit aktualizovaný řádek zpět do jiného DataTable, můžete zachovat původní hodnotu sloupce primárního klíče. Například sloupec primárního klíče odpovídající automaticky se zvyšujícímu sloupci v databázi, například sloupec identity, může obsahovat nové hodnoty přiřazené databází, které neodpovídají původním hodnotám přiřazeným v DataRow. Ve výchozím nastavení AcceptChanges se volá implicitně po aktualizaci a původní hodnoty v řádku, které mohly být AutoIncrement přiřazeny ADO.NET, jsou ztraceny. Původní hodnoty v objektu DataRow můžete zachovat tak, že zabráníte ADO.NET volání AcceptChanges po provedení aktualizace řádku nastavením AcceptChangesDuringUpdate vlastnosti na falsehodnotu , která zachová původní hodnoty.

Poznámka

AcceptChangesDuringUpdate Nastavení vlastnosti na false platí pro všechny úpravy dat, nejen pro vložení. Pokud chcete upravit nebo odstranit řádky ve stejné aktualizaci a chcete potlačit volání AcceptChanges pouze pro vložení, pak místo nastavení AcceptChangesDuringUpdate na falsepoužijte obslužnou rutinu RowUpdated události pro událost DataAdapter. V obslužné rutině události můžete zkontrolovat StatementType , jestli je úprava dat vložením, a pokud true, nastavit Status vlastnost objektu RowUpdatedEventArgs na SkipCurrentRow. Další informace a příklad najdete v tématu Načítání hodnot identity nebo automatického číslování.

Platí pro

Viz také