IDataAdapter.Update(DataSet) 方法

定义

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

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

参数

dataSet
DataSet

用于更新数据源的 DataSet

返回

DataSet 中成功更新的行数。

例外

尝试执行 INSERT、UPDATE 或 DELETE 语句,但没有记录受到影响。

示例

以下示例对数据源使用派生类 OleDbDataAdapterUpdate 此示例假定你已创建 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 方法时,会 IDataAdapter 检查 RowState 属性,并根据 中 DataSet配置的索引顺序,对每一行迭代执行所需的 INSERT、UPDATE 或 DELETE 语句。 例如, Update 可能会执行 DELETE 语句,后跟 INSERT 语句,然后执行另一个 DELETE 语句,因为 中 DataTable行的顺序。

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

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

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

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

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

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

  2. 引发 OnRowUpdating 事件。

  3. 命令执行。

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

  5. 如果有输出参数,则它们将放在 中 DataRow

  6. 引发 OnRowUpdated 事件。

  7. 调用 AcceptChanges

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

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

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

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

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

注意

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

适用于