IDataAdapter.Update 方法

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

**命名空间:**System.Data
**程序集:**System.Data(在 system.data.dll 中)

语法

声明
Function Update ( _
    dataSet As DataSet _
) As Integer
用法
Dim instance As IDataAdapter
Dim dataSet As DataSet
Dim returnValue As Integer

returnValue = instance.Update(dataSet)
int Update (
    DataSet dataSet
)
int Update (
    DataSet^ dataSet
)
int Update (
    DataSet dataSet
)
function Update (
    dataSet : DataSet
) : int

参数

  • dataSet
    用于更新数据源的 DataSet

返回值

DataSet 中成功更新的行数。

异常

异常类型 条件

DBConcurrencyException

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

备注

当应用程序调用 Update 方法时,IDataAdapter 根据 DataSet 中配置的索引顺序为每一行检查 RowState 属性,并迭代执行所需的 INSERT、UPDATE 或 DELETE 语句。例如,由于 DataTable 中行的排序,Update 可能先执行一个 DELETE 语句,接着执行一个 INSERT 语句,然后再执行另一个 DELETE 语句。

应注意,这些语句不是作为批处理进程执行的;每一行都是单独更新的。在必须控制语句类型顺序的情况下(例如,INSERT 在 UPDATE 之前),应用程序可以调用 GetChanges 方法。有关更多信息,请参见 使用 DataAdapter 更新数据源

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

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

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

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

  1. DataRow 中的值移至参数值。

  2. 引发 OnRowUpdating 事件。

  3. 执行命令。

  4. 如果该命令设置为 FirstReturnedRecord,返回的第一项结果将放置在 DataRow 中。

  5. 如果存在输出参数,它们将被放在 DataRow 中。

  6. 引发 OnRowUpdated 事件。

  7. 调用 AcceptChanges

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

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

枚举值

采取的操作

MissingMappingAction.Passthrough

如果不存在任何映射,则使用 DataSet 中的源列名和表名。

MissingMappingAction.Ignore

生成 SystemException。当显式设置映射时,缺少输入参数的映射通常是由于出错所致。

MissingMappingAction.Error

生成 SystemException

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

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

提示

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

示例

下面的示例使用派生类 OleDbDataAdapter 来对数据源进行 Update。此示例假定您已经创建了一个 OleDbDataAdapter 和一个 DataSet

Public Function CreateCommandAndUpdate( _
    ByVal connectionString As String, _
    ByVal queryString As String) As DataSet

    Dim dataSet As DataSet = New DataSet

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

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

        Dim commandBuilder As OleDbCommandBuilder = _
            New OleDbCommandBuilder(dataAdapter)

        dataAdapter.Fill(dataSet)

        ' Code to modify the data in the DataSet here. 

        ' Without the OleDbCommandBuilder this line would fail.
        dataAdapter.Update(dataSet)
    End Using
    CreateCommandAndUpdate = dataSet
End Function
static private DataSet CreateCommandAndUpdate(
    string connectionString,
    string queryString)
{
    DataSet dataSet = new DataSet();

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

        dataAdapter.Fill(dataSet);

        // Code to modify data in the DataSet here.

        //Without the OleDbCommandBuilder this line would fail.
        dataAdapter.Update(dataSet);
    }
    return dataSet;
}

平台

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

.NET Compact Framework

受以下版本支持:2.0、1.0

请参见

参考

IDataAdapter 接口
IDataAdapter 成员
System.Data 命名空间