DataAdapter.Update(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.")]
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
Реализации
- Атрибуты
Исключения
Исходная таблица недопустима.
Попытка выполнить инструкцию 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порядок выполнения выглядит следующим образом:
Значения в этом DataRow файле перемещаются в значения параметров.
Возникает событие OnRowUpdating.
Выполняется команда.
Если задано
FirstReturnedRecordзначение команды, введите первый возвращенный результат DataRow.Если есть выходные параметры, они помещаются в .DataRow
Возникает событие OnRowUpdated.
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 параметра должно иметь имя столбца. Этот параметр указывает, что значение параметра не задано вручную, но берется из конкретного столбца в текущей обработанной строке.