Поделиться через


DataAdapter.Update(DataSet) Метод

Определение

Вызывает соответствующие операторы INSERT, UPDATE или DELETE для каждой вставленной, обновленной или удаленной строки в указанном объекте DataSet из DataTable с именем "Table".

public:
 virtual int Update(System::Data::DataSet ^ dataSet);
public:
 abstract int Update(System::Data::DataSet ^ dataSet);
public virtual int Update (System.Data.DataSet dataSet);
public abstract int Update (System.Data.DataSet dataSet);
abstract member Update : System.Data.DataSet -> int
override this.Update : System.Data.DataSet -> int
abstract member Update : System.Data.DataSet -> int
Public Overridable Function Update (dataSet As DataSet) As Integer
Public MustOverride Function Update (dataSet As DataSet) As Integer

Параметры

dataSet
DataSet

Объект DataSet, использованный для обновления источника данных.

Возвращаемое значение

Количество строк, успешно обновленных из объекта DataSet.

Реализации

Исключения

Исходная таблица является недопустимой.

Попытка выполнить оператор INSERT, UPDATE или DELETE привела к нулевому количеству обработанных записей.

Примеры

В следующем примере для источника данных используется Update производный класс OleDbDataAdapter, .

static private DataSet CreateCommandAndUpdate(
    string connectionString,
    string queryString)
{
    DataSet dataSet = new DataSet();

    using (OleDbConnection connection =
               new OleDbConnection(connectionString))
    {
        connection.Open();
        OleDbDataAdapter adapter =
            new OleDbDataAdapter();
        adapter.SelectCommand =
            new OleDbCommand(queryString, connection);
        OleDbCommandBuilder builder =
            new OleDbCommandBuilder(adapter);

        adapter.Fill(dataSet);

        // Code to modify data in the DataSet here.

        // Without the OleDbCommandBuilder, this line would fail.
        adapter.UpdateCommand = builder.GetUpdateCommand();
        adapter.Update(dataSet);
    }
    return dataSet;
}
Public Function CreateCommandAndUpdate( _
    ByVal connectionString As String, _
    ByVal queryString As String) As DataSet

    Dim dataSet As New DataSet()

    Using connection As New OleDbConnection(connectionString)
        connection.Open()
        Dim adapter As New OleDbDataAdapter()

        adapter.SelectCommand = New OleDbCommand( _
            queryString, connection)

        Dim builder As OleDbCommandBuilder = _
            New OleDbCommandBuilder(adapter)

        adapter.Fill(dataSet)

        ' Code to modify the data in the DataSet here. 

        ' Without the OleDbCommandBuilder this line would fail.
        builder.GetUpdateCommand()
        adapter.Update(dataSet)
    End Using
    Return dataSet
End Function

Комментарии

Обновление выполняется построчно. Для каждой вставленной, измененной и удаленной строки метод определяет тип изменения, Update которое было выполнено в ней (вставка, обновление или удаление). В зависимости от типа изменения InsertUpdate, шаблон команды или Delete выполняется для распространения измененной строки в источник данных. Когда приложение вызывает Update метод , DataAdapter объект проверяет RowState свойство и выполняет необходимые инструкции INSERT, UPDATE или DELETE для каждой строки в зависимости от порядка индексов, настроенных в DataSet. Например, Update может выполнить инструкцию DELETE, за которой следует инструкция INSERT, а затем еще одну инструкцию DELETE из-за упорядочения строк в DataTable.

Следует отметить, что эти инструкции не выполняются как пакетный процесс; каждая строка обновляется по отдельности. Приложение может вызывать GetChanges метод в ситуациях, когда необходимо управлять последовательностью типов инструкций (например, INSERT перед UPDATE). Дополнительные сведения см. в разделе Обновление источников данных с помощью DataAdapters.

Если инструкции INSERT, UPDATE или DELETE не указаны, Update метод создает исключение. Однако можно создать объект или OleDbCommandBuilder для автоматического SqlCommandBuilder создания инструкций SQL для обновлений из одной таблицы, если задано SelectCommand свойство поставщика данных платформа .NET Framework. Затем все дополнительные инструкции SQL, которые не заданы, создаются с помощью CommandBuilder. Для этой логики создания необходимо, чтобы сведения о ключевом столбце присутствовали DataSetв . Дополнительные сведения см. в разделе Создание команд с помощью CommandBuilders.

Перед Update обновлением метод извлекает строки из таблицы, указанной в первом сопоставлении. Затем Update обновляет строку, используя значение UpdatedRowSource свойства . Все возвращаемые дополнительные строки игнорируются.

После загрузки всех данных обратно в DataSetвызывается OnRowUpdated событие , что позволяет пользователю проверить выверенную DataSet строку и все выходные параметры, возвращенные командой . После успешного обновления строки изменения этой строки принимаются.

При использовании Updateпорядок выполнения выглядит следующим образом:

  1. Значения в перемещены DataRow в значения параметров.

  2. Возникает событие OnRowUpdating.

  3. Выполняется команда .

  4. Если для команды задано значение FirstReturnedRecord, то первый возвращенный результат помещается в DataRow.

  5. Если есть выходные параметры, они помещаются в DataRow.

  6. Возникает событие OnRowUpdated.

  7. Вызывается метод DataRow.AcceptChanges. Это приведет к возникновению DataTable.RowChanging событий и DataTable.RowChanged для обновленного DataRowобъекта .

Каждая команда, связанная с , DataAdapter обычно имеет коллекцию параметров, связанную с ней. Параметры сопоставляются с текущей строкой SourceColumn с помощью свойств и SourceVersion класса поставщика Parameter данных .NET. SourceColumn ссылается на столбец DataTable , на который ссылается DataAdapter для получения значений параметров для текущей строки.

SourceColumn ссылается на несопоставленное имя столбца перед применением каких-либо сопоставлений таблиц. Если SourceColumn ссылается на несуществующий столбец, то выполняемое действие зависит от одного из следующих MissingMappingAction значений.

Значение перечисления Предпринятое действие
MissingMappingAction.Passthrough Используйте имена исходных столбцов и таблиц в , DataSet если сопоставление отсутствует.
MissingMappingAction.Ignore Создается SystemException объект . Если сопоставления заданы явным образом, отсутствует сопоставление входного параметра, как правило, является результатом ошибки.
MissingMappingAction.Error Создается SystemException объект .

Свойство SourceColumn также используется для сопоставления значения выходных или входных/выходных параметров с DataSet. Исключение создается, если оно ссылается на несуществующий столбец.

Свойство SourceVersion класса поставщика Parameter данных .NET определяет, следует ли использовать исходную, текущую или предложенную версию столбца. Эта возможность часто используется для включения исходных значений в предложение WHERE инструкции UPDATE для проверка нарушений оптимистичного параллелизма.

AcceptChanges Вызов метода или AcceptChanges метода зафиксировать все изменения в DataSet или DataTable. Если любой из этих методов вызывается до Update вызова метода, при Update вызове метода никакие изменения не будут зафиксированы, если с тех пор AcceptChanges не были внесены дальнейшие изменения или AcceptChanges не были выполнены.

Примечание

Если при обновлении строки возникает ошибка, возникает исключение и выполнение обновления прекращается. Чтобы продолжить операцию обновления без создания исключений при возникновении ошибки, перед вызовом Updateзадайте свойству ContinueUpdateOnError значение true . Вы также можете реагировать на ошибки по строке в событии RowUpdated DataAdapter. Чтобы продолжить операцию обновления без создания исключения в событии RowUpdated , присвойте свойству StatusRowUpdatedEventArgs объекта значение Continue.

Для каждого столбца, который вы распространяете на источник Updateданных в , необходимо добавить параметр в InsertCommand, UpdateCommandили DeleteCommand. Свойству SourceColumn параметра должно быть присвоено имя столбца. Этот параметр указывает, что значение параметра не задается вручную, а берется из конкретного столбца в обработанной строке.

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

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