DataAdapter.AcceptChangesDuringUpdate 属性     
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置在 AcceptChanges() 期间是否调用 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
	属性值
如果在 AcceptChanges() 期间调用 Update(DataSet),则为 true;否则为 false。 默认值为 true。
示例
此示例演示从 DataTable 中提取已更改的行,然后使用 SqlDataAdapter 更新数据源并检索新标识列值。 通过将 的 SqlDataAdapter 属性设置为 AcceptChangesDuringUpdatefalse 以保留原始自动递增值,可以将新数据合并到原始DataTable数据中,即使新的标识值与 中的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
	注解
在调用 Update 的 DataAdapter方法期间,数据库可以将数据作为输出参数或结果集的第一个返回记录发送回 ADO.NET 应用程序。 ADO.NET 可以检索这些值并在要更新的 DataRow 中更新相应的列。 默认情况下,ADO.NET 更新后调用 AcceptChanges 的 DataRow 方法。 但是,如果要将更新的行合并回另一行 DataTable,可能需要保留主键列的原始值。 例如,对应于数据库中自动递增列的主键列(例如标识列)可以包含数据库分配的新值,这些值与 中 DataRow分配的原始值不匹配。 默认情况下, AcceptChanges 在更新后隐式调用 ,并且行中的原始值(可能是 AutoIncrement ADO.NET 分配的值)将丢失。 通过将 属性false设置为 ,可保留原始值DataRow,从而阻止ADO.NET在对行执行更新后调用AcceptChanges,从而保留中的原始AcceptChangesDuringUpdate值。
注意
将 AcceptChangesDuringUpdate 属性设置为 false 将应用于所有数据修改,而不仅仅是插入。 如果要编辑或删除同一更新中的行,并且想要禁止仅插入对 的调用 AcceptChanges ,则不要将 设置为 AcceptChangesDuringUpdatefalse,请对 RowUpdated 的 DataAdapter事件使用事件处理程序。 在事件处理程序中,可以检查 StatementType 以确定数据修改是否为插入,如果 true为 ,请将 的 RowUpdatedEventArgs 属性设置为 StatusSkipCurrentRow。 有关详细信息和示例,请参阅检索标识或自动编号值。