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


DataAdapter.Update(DataSet) Метод

Определение

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

public:
 virtual int Update(System::Data::DataSet ^ dataSet);
public:
 abstract int Update(System::Data::DataSet ^ dataSet);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
public virtual int Update(System.Data.DataSet dataSet);
public virtual int Update(System.Data.DataSet dataSet);
public abstract int Update(System.Data.DataSet dataSet);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
abstract member Update : System.Data.DataSet -> int
override this.Update : System.Data.DataSet -> int
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 привела к нулю записей, затронутых.

Примеры

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

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 метод определяет тип изменений, выполненных на нем (Insert, Update или Delete). В зависимости от типа изменения шаблон InsertUpdate, или Delete шаблон команды выполняется для распространения измененной строки в источник данных. При вызове Update метода DataAdapter приложение проверяет RowState свойство и выполняет необходимые инструкции INSERT, UPDATE или DELETE, итеративно для каждой строки в зависимости от порядка индексов, настроенных в нем DataSet. Например, Update может выполнять инструкцию DELETE, за которой следует инструкция INSERT, а затем другая инструкция DELETE из-за упорядочения строк в объекте DataTable.

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

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

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

После загрузки всех данных обратно в DataSetOnRowUpdated объект вызывается событие, что позволяет пользователю проверять согласованную 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 были вызваны.

Замечание

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

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

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

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