通过


IDataAdapter.Update(DataSet) 方法

定义

为指定的“Table”中指定的每个插入、更新或删除行DataSetDataTable调用相应的 INSERT、UPDATE 或 DELETE 语句。

public:
 int Update(System::Data::DataSet ^ dataSet);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
public int Update(System.Data.DataSet dataSet);
public 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
abstract member Update : System.Data.DataSet -> int
Public Function Update (dataSet As DataSet) As Integer

参数

dataSet
DataSet

DataSet用于更新数据源。

返回

已成功更新的 DataSet行数。

属性

例外

尝试执行 INSERT、UPDATE 或 DELETE 语句会导致零条记录受到影响。

示例

以下示例将派生类 OleDbDataAdapter用于 Update 数据源。 此示例假定已创建一个和一个 OleDbDataAdapterDataSet

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该方法时,检查IDataAdapterRowState属性,并根据在 中DataSet配置的索引的顺序,以迭代方式对每一行执行所需的 INSERT、UPDATE 或 DELETE 语句。 例如, Update 可能会执行 DELETE 语句,后跟 INSERT 语句,然后执行另一个 DELETE 语句,因为行的顺序 DataTable

请注意,这些语句不作为批处理执行;每行单独更新。 如果必须控制语句类型的序列(例如 UPDATEEs 之前的 INSERT),应用程序可以调用 GetChanges 该方法。 有关详细信息,请参阅 使用 DataAdapters 更新数据源

如果未指定 INSERT、UPDATE 或 DELETE 语句,该方法 Update 将生成异常。 但是,如果设置 SelectCommand .NET Framework 数据提供程序的属性,则可以创建或SqlCommandBuilderOleDbCommandBuilder对象来自动生成单表更新的 SQL 语句。 然后,不设置的任何其他 SQL 语句都由 CommandBuilder 生成。 此生成逻辑要求关键列信息存在于 .DataSet 有关详细信息,请参阅 使用 CommandBuilders 生成命令

在执行更新之前,该方法 Update 从第一个映射中列出的表中检索行。 然后, Update 使用 UpdatedRowSource 属性值更新行。 将忽略返回的任何其他行。

将任何数据加载回 DataSet事件后, OnRowUpdated 将引发该事件,允许用户检查协调 DataSet 的行和命令返回的任何输出参数。 行成功更新后,将接受该行的更改。

使用 Update时,执行顺序如下所示:

  1. 中的值 DataRow 将移动到参数值。

  2. 引发 OnRowUpdating 事件。

  3. 该命令执行。

  4. 如果命令设置为 FirstReturnedRecord,则将第一个返回的结果放入该命令中 DataRow

  5. 如果存在输出参数,则会将其放入 。DataRow

  6. 引发 OnRowUpdated 事件。

  7. 调用 AcceptChanges

与通常关联的 IDataAdapter 每个命令都有一个与之关联的参数集合。 参数通过 SourceColumnSourceVersion .NET Framework 数据提供程序类 Parameter 的属性映射到当前行。 SourceColumn 引用 DataTable 引用以获取当前行的参数值的列 IDataAdapter

SourceColumn 指应用任何表映射之前未映射的列名。 如果 SourceColumn 引用不存在的列,则采取的操作取决于以下 MissingMappingAction 值之一。

枚举值 已执行的操作
MissingMappingAction.Passthrough 如果没有映射, DataSet 请使用源列名和表名。
MissingMappingAction.Ignore 生成 A SystemException 。 显式设置映射时,输入参数缺少的映射通常是由错误引起的。
MissingMappingAction.Error 生成 A SystemException

SourceColumn属性还用于将输出或输入/输出参数的值映射回 。DataSet 如果异常引用不存在的列,则会生成异常。

SourceVersion.NET Framework 数据提供程序Parameter类的属性确定是使用Original列值的列CurrentProposed值还是版本。 此功能通常用于在 UPDATE 语句的 WHERE 子句中包含原始值,以检查是否存在乐观并发冲突。

注释

如果在更新行时发生错误,则会引发异常并停止执行更新。 若要在遇到错误时继续执行更新操作而不生成异常,请在调用之前将 属性设置为 。 还可以在 DataAdapter 事件中 RowUpdated 按行响应错误。 若要继续更新操作而不在事件中RowUpdated生成异常,请将该属性RowUpdatedEventArgs设置为 StatusContinue

适用于