DataAdapter.AcceptChangesDuringUpdate Vlastnost

Definice

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

public bool AcceptChangesDuringUpdate { get; set; }

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

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é