DataAdapter.AcceptChangesDuringUpdate Eigenschap
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Haalt of stelt in of AcceptChanges() wordt aangeroepen tijdens een 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
Waarde van eigenschap
true indien AcceptChanges() wordt aangeroepen tijdens een Update(DataSet); anders false. De standaardwaarde is true.
Voorbeelden
In dit voorbeeld ziet u hoe gewijzigde rijen worden geëxtraheerd uit een DataTable en een SqlDataAdapter om de gegevensbron bij te werken en een nieuwe waarde voor de identiteitskolom op te halen. Door de AcceptChangesDuringUpdate eigenschap van de SqlDataAdapter eigenschap in te stellen om de oorspronkelijke automatische incrementele waarde te false behouden, kunnen de nieuwe gegevens vervolgens worden samengevoegd in de oorspronkelijke DataTable, zelfs als de nieuwe identiteitswaarde niet overeenkomt met de oorspronkelijke automatische verhogingswaarde in de 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
Opmerkingen
Tijdens een aanroep van de methode Update van een DataAdapter kan de database gegevens als uitvoerparameters of als de eerste geretourneerde record van een resultatenset naar uw ADO.NET toepassing verzenden. ADO.NET kunt deze waarden ophalen en de bijbehorende kolommen in de DataRow bijgewerkte kolom bijwerken. Standaard roept ADO.NET de methode AcceptChanges van de DataRow aan na de update. Als u de bijgewerkte rij echter weer wilt samenvoegen in een andere DataTable, kunt u de oorspronkelijke waarde van een primaire-sleutelkolom behouden. Een primaire-sleutelkolom die overeenkomt met een kolom die automatisch wordt verhoogd in de database, zoals een identiteitskolom, kan bijvoorbeeld nieuwe waarden bevatten die zijn toegewezen door de database die niet overeenkomen met de oorspronkelijke waarden die zijn toegewezen in de DataRowdatabase. Standaard wordt AcceptChanges impliciet aangeroepen na een update en gaan de oorspronkelijke waarden in de rij, die mogelijk zijn AutoIncrement waarden die zijn toegewezen door ADO.NET, verloren. U kunt de oorspronkelijke waarden in de DataRow behouden door te voorkomen dat ADO.NETAcceptChanges aanroept nadat er een update op een rij is uitgevoerd door de eigenschap AcceptChangesDuringUpdate in te stellen op false, waardoor de oorspronkelijke waarden behouden blijven.
Note
Het instellen van de AcceptChangesDuringUpdate eigenschap op false van toepassing op alle gegevenswijzigingen, niet alleen invoegen. Als u rijen in dezelfde update wilt bewerken of verwijderen en als u de aanroep alleen AcceptChanges wilt onderdrukken voor invoegen, gebruikt u een falseAcceptChangesDuringUpdate gebeurtenis-handler voor de gebeurtenis van de RowUpdatedDataAdaptergebeurtenis. In de gebeurtenis-handler kunt u controleren StatementType of de gegevenswijziging een invoegpositie is en of true, stel de eigenschap van de StatusRowUpdatedEventArgs eigenschap in op SkipCurrentRow. Zie Identiteits- of Autonummeringswaarden ophalen voor meer informatie en een voorbeeld.