DataAdapter.AcceptChangesDuringUpdate Свойство

Определение

Возвращает или задает, вызывается ли метод AcceptChanges() при вызове метода Update(DataSet).

public bool AcceptChangesDuringUpdate { get; set; }

Значение свойства

Значение true, если метод AcceptChanges() вызывается при вызове метода Update(DataSet); в противном случае — значение false. Значение по умолчанию — true.

Примеры

В этом примере демонстрируется извлечение измененных строк из DataTable и использование объекта SqlDataAdapter для обновления источника данных и получения нового значения столбца идентификаторов. Присвоив свойству falseSqlDataAdapter свойства значение , чтобы сохранить исходное значение автоматического приращения, новые данные могут быть объединены в исходный DataTable, даже если новое значение идентификатора не соответствует исходному значению автоматического приращения в DataTable.AcceptChangesDuringUpdate

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

Комментарии

Во время вызова Update метода DataAdapterбазы данных может отправлять данные обратно в приложение ADO.NET в качестве выходных параметров или первой возвращенной записи результирующих наборов. Среда ADO.NET позволяет получать эти значения и обновлять соответствующие столбцы в обновляемом объекте DataRow. По умолчанию ADO.NET вызывает AcceptChanges метод DataRow после обновления. Однако если вы хотите объединить обновленную строку обратно в другую DataTable, может потребоваться сохранить исходное значение столбца первичного ключа. Например, столбец первичного ключа, соответствующий столбцу с автоматическим увеличением в базе данных, например столбец идентификаторов, может содержать новые значения, назначенные базой данных, которые не соответствуют исходным значениям, назначенным DataRowв . По умолчанию AcceptChanges вызывается неявно после обновления, а исходные значения в строке, которые могли быть AutoIncrement значениями, назначенными ADO.NET, теряются. Вы можете сохранить исходные значения в , DataRow запретив вызов AcceptChanges после обновления строки, задав ADO.NET свойству AcceptChangesDuringUpdatefalseзначение , которое сохраняет исходные значения.

Примечание

Задание свойству AcceptChangesDuringUpdate значения false применяется ко всем изменениям данных, а не только к вставкам. Если вы хотите изменить или удалить строки в том же обновлении и отключить вызов AcceptChanges только для вставок, то вместо того, чтобы задать falseзначение AcceptChangesDuringUpdate , используйте обработчик событий для RowUpdated события DataAdapter. В обработчике событий можно проверка StatementType , чтобы определить, является ли изменение данных вставкой, а если true— задать Status для свойства RowUpdatedEventArgsSkipCurrentRowсвойства значение . Дополнительные сведения и пример см. в разделе Получение значений идентификатора или автонумера.

Применяется к

Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

См. также раздел