语言

DbDataAdapter.Update 方法

定义

通过对 DataSet中每个插入、更新或删除的行执行相应的 INSERT、UPDATE 或 DELETE 语句来更新数据库中的值。

重载

名称 说明
Update(DataSet, String)

通过对具有指定 DataSet 名称的 DataTable 中每个插入、更新或删除的行执行相应的 INSERT、UPDATE 或 DELETE 语句来更新数据库中的值。

Update(DataRow[], DataTableMapping)

通过在指定的 DataRow 对象的数组中为每个插入、更新或删除的行执行相应的 INSERT、UPDATE 或 DELETE 语句来更新数据库中的值。

Update(DataTable)

通过对指定 DataTable中每个插入、更新或删除的行执行相应的 INSERT、UPDATE 或 DELETE 语句来更新数据库中的值。

Update(DataSet)

通过对指定 DataSet中每个插入、更新或删除的行执行相应的 INSERT、UPDATE 或 DELETE 语句来更新数据库中的值。

Update(DataRow[])

通过对 DataSet中指定数组中每个插入、更新或删除的行执行相应的 INSERT、UPDATE 或 DELETE 语句来更新数据库中的值。

Update(DataSet, String)

Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs

通过对具有指定 DataSet 名称的 DataTable 中每个插入、更新或删除的行执行相应的 INSERT、UPDATE 或 DELETE 语句来更新数据库中的值。

public:
 int Update(System::Data::DataSet ^ dataSet, System::String ^ srcTable);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
public int Update(System.Data.DataSet dataSet, string srcTable);
public int Update(System.Data.DataSet dataSet, string srcTable);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
override this.Update : System.Data.DataSet * string -> int
override this.Update : System.Data.DataSet * string -> int
Public Function Update (dataSet As DataSet, srcTable As String) As Integer

参数

dataSet
DataSet

用于更新数据源的 DataSet。

srcTable
String

要用于表映射的源表的名称。

返回

从 DataSet成功更新的行数。

属性

例外

源表无效。

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

示例

以下示例使用派生类(OleDbDataAdapter)更新数据源。

public DataSet CreateCmdsAndUpdate(string connectionString,
    string queryString, string tableName)
{
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        adapter.SelectCommand = new OleDbCommand(queryString, connection);
        OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

        connection.Open();

        DataSet customers = new DataSet();
        adapter.Fill(customers);

        //code to modify data in dataset here

        adapter.Update(customers, tableName);

        return customers;
    }
}
Public Function CreateCmdsAndUpdate(ByVal connectionString As String, _
    ByVal queryString As String, _
    ByVal tableName As String) As DataSet

    Using connection As New OleDbConnection(connectionString)
        Dim adapter As New OleDbDataAdapter()
        adapter.SelectCommand = New OleDbCommand(queryString, connection)
        Dim builder As New OleDbCommandBuilder(adapter)

        connection.Open()

        Dim customers As New DataSet()
        adapter.Fill(customers)

        ' Code to modify data in DataSet here 

        adapter.Update(customers, tableName)

        Return customers
    End Using
End Function

注解

当应用程序调用 Update 方法时,DbDataAdapter 会检查 RowState 属性,并根据 DataSet中配置的索引的顺序,以迭代方式对每一行执行所需的 INSERT、UPDATE 或 DELETE 语句。 例如,Update 可能会执行 DELETE 语句,后跟 INSERT 语句,然后执行另一个 DELETE 语句,因为 DataTable中的行的顺序。

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

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

此方法 Update 支持包含 DataSet 多个 DataTable 对象(其名称仅因大小写而异)的方案。 当多个具有相同名称但不同大小写的表存在于 DataSet中时,Update 执行区分大小写的比较来查找相应的表,并在不存在完全匹配时生成异常。 以下 C# 代码演示了此行为。

DataSet ds = new DataSet();
 ds.Tables.Add("aaa");
 ds.Tables.Add("AAA");
 adapter.Update(ds, "aaa"); // Updates "aaa", which already exists in the DataSet.
 adapter.Update(ds, "AAA"); // Updates "AAA", which already exists in the DataSet.
    adapter.Update(ds, "Aaa"); // Results in an exception.

如果 Update 调用,并且 DataSet 只包含名称仅因大小写而异的一个 DataTable ,则 DataTable 更新。 在此方案中,比较不区分大小写。 以下 C# 代码演示了此行为。

DataSet dataset = new DataSet();
 dataset.Tables.Add("aaa");
    adapter.Update(dataset, "AAA"); // Updates table "aaa" because only one similarly named table is in the DataSet.

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

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

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

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

  2. 引发 OnRowUpdating 事件。

  3. 该命令执行。

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

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

  6. 引发 OnRowUpdated 事件。

  7. 调用 AcceptChanges。

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

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

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

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

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

注释

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

另请参阅

适用于

Update(DataRow[], DataTableMapping)

Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs

通过在指定的 DataRow 对象的数组中为每个插入、更新或删除的行执行相应的 INSERT、UPDATE 或 DELETE 语句来更新数据库中的值。

protected:
 virtual int Update(cli::array <System::Data::DataRow ^> ^ dataRows, System::Data::Common::DataTableMapping ^ tableMapping);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
protected virtual int Update(System.Data.DataRow[] dataRows, System.Data.Common.DataTableMapping tableMapping);
protected virtual int Update(System.Data.DataRow[] dataRows, System.Data.Common.DataTableMapping tableMapping);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
override this.Update : System.Data.DataRow[] * System.Data.Common.DataTableMapping -> int
override this.Update : System.Data.DataRow[] * System.Data.Common.DataTableMapping -> int
Protected Overridable Function Update (dataRows As DataRow(), tableMapping As DataTableMapping) As Integer

参数

dataRows
DataRow[]

用于更新数据源的 DataRow 对象的数组。

tableMapping
DataTableMapping

要使用的 TableMappings 集合。

返回

从 DataRow 对象的数组成功更新的行数。

属性

例外

源表无效。

不存在要更新的 DataRow。

-或-

不存在要更新的 DataTable。

-或-

不存在用作源的 DataSet。

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

注解

当应用程序调用 Update 方法时,DbDataAdapter 会检查 RowState 属性,并根据 DataSet中配置的索引的顺序,以迭代方式对每一行执行所需的 INSERT、UPDATE 或 DELETE 语句。 例如,Update 可能会执行 DELETE 语句,后跟 INSERT 语句,然后执行另一个 DELETE 语句,因为 DataTable中的行的顺序。

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

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

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

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

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

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

  2. 引发 OnRowUpdating 事件。

  3. 该命令执行。

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

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

  6. 引发 OnRowUpdated 事件。

  7. 调用 AcceptChanges。

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

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

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

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

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

注释

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

另请参阅

适用于

Update(DataTable)

Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs

通过对指定 DataTable中每个插入、更新或删除的行执行相应的 INSERT、UPDATE 或 DELETE 语句来更新数据库中的值。

public:
 int Update(System::Data::DataTable ^ dataTable);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
public int Update(System.Data.DataTable dataTable);
public int Update(System.Data.DataTable dataTable);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
override this.Update : System.Data.DataTable -> int
override this.Update : System.Data.DataTable -> int
Public Function Update (dataTable As DataTable) As Integer

参数

dataTable
DataTable

用于更新数据源的 DataTable。

返回

从 DataTable成功更新的行数。

属性

例外

源表无效。

不存在要更新的 DataRow。

-或-

不存在要更新的 DataTable。

-或-

不存在用作源的 DataSet。

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

示例

以下示例使用派生类(OleDbDataAdapter)更新数据源。

public DataTable CreateCmdsAndUpdate(string connectionString,
    string queryString)
{
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        adapter.SelectCommand = new OleDbCommand(queryString, connection);
        OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

        connection.Open();

        DataTable customers = new DataTable();
        adapter.Fill(customers);

        // code to modify data in DataTable here

        adapter.Update(customers);

        return customers;
    }
}
Public Function CreateCmdsAndUpdate(ByVal connectionString As String, _
    ByVal queryString As String) As DataTable

    Using connection As New OleDbConnection(connectionString)
        Dim adapter As New OleDbDataAdapter()
        adapter.SelectCommand = New OleDbCommand(queryString, connection)
        Dim builder As New OleDbCommandBuilder(adapter)

        connection.Open()

        Dim customers As New DataTable()
        adapter.Fill(customers)

        ' Code to modify data in DataTable here 

        adapter.Update(customers)
        Return customers
    End Using
End Function

注解

当应用程序调用 Update 方法时,DbDataAdapter 会检查 RowState 属性,并根据 DataSet中配置的索引的顺序,以迭代方式对每一行执行所需的 INSERT、UPDATE 或 DELETE 语句。 例如,Update 可能会执行 DELETE 语句,后跟 INSERT 语句,然后执行另一个 DELETE 语句,因为 DataTable中的行的顺序。

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

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

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

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

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

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

  2. 引发 OnRowUpdating 事件。

  3. 该命令执行。

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

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

  6. 引发 OnRowUpdated 事件。

  7. 调用 AcceptChanges。

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

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

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

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

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

注释

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

另请参阅

适用于

Update(DataSet)

Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs

通过对指定 DataSet中每个插入、更新或删除的行执行相应的 INSERT、UPDATE 或 DELETE 语句来更新数据库中的值。

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

参数

dataSet
DataSet

用于更新数据源的 DataSet。

返回

从 DataSet成功更新的行数。

实现

属性

例外

源表无效。

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

示例

以下示例使用派生类(OleDbDataAdapter)更新数据源。

public DataSet CreateCmdsAndUpdate(string connectionString,
    string queryString)
{
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        adapter.SelectCommand = new OleDbCommand(queryString, connection);
        OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

        connection.Open();

        DataSet customers = new DataSet();
        adapter.Fill(customers);

        //code to modify data in dataset here

        adapter.Update(customers);

        return customers;
    }
}
Public Function CreateCmdsAndUpdate(ByVal connectionString As String, _
    ByVal queryString As String) As DataSet

    Using connection As New OleDbConnection(connectionString)
        Dim adapter As New OleDbDataAdapter()
        adapter.SelectCommand = New OleDbCommand(queryString, connection)
        Dim builder As New OleDbCommandBuilder(adapter)

        connection.Open()

        Dim customers As New DataSet()
        adapter.Fill(customers)

        ' Code to modify data in DataSet here 

        adapter.Update(customers)

        Return customers
    End Using
End Function

注解

当应用程序调用 Update 方法时,DbDataAdapter 会检查 RowState 属性,并根据 DataSet中配置的索引的顺序,以迭代方式对每一行执行所需的 INSERT、UPDATE 或 DELETE 语句。 例如,Update 可能会执行 DELETE 语句,后跟 INSERT 语句,然后执行另一个 DELETE 语句,因为 DataTable中的行的顺序。

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

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

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

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

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

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

  2. 引发 OnRowUpdating 事件。

  3. 该命令执行。

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

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

  6. 引发 OnRowUpdated 事件。

  7. 调用 AcceptChanges。

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

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

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

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

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

注释

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

另请参阅

适用于

Update(DataRow[])

Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs

通过对 DataSet中指定数组中每个插入、更新或删除的行执行相应的 INSERT、UPDATE 或 DELETE 语句来更新数据库中的值。

public:
 int Update(cli::array <System::Data::DataRow ^> ^ dataRows);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
public int Update(System.Data.DataRow[] dataRows);
public int Update(System.Data.DataRow[] dataRows);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
override this.Update : System.Data.DataRow[] -> int
override this.Update : System.Data.DataRow[] -> int
Public Function Update (dataRows As DataRow()) As Integer

参数

dataRows
DataRow[]

用于更新数据源的 DataRow 对象的数组。

返回

从 DataSet成功更新的行数。

属性

例外

源表无效。

不存在要更新的 DataRow。

-或-

不存在要更新的 DataTable。

-或-

不存在用作源的 DataSet。

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

示例

以下示例使用派生类(OleDbDataAdapter)更新数据源。

public DataSet CreateCmdsAndUpdate(string connectionString,
    string queryString)
{
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        adapter.SelectCommand = new OleDbCommand(queryString, connection);
        OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

        connection.Open();

        DataSet customers = new DataSet();
        adapter.Fill(customers);

        //code to modify data in dataset here

        //Insert new records from DataSet
        DataRow[] rows = customers.Tables[0].Select(
            null, null, DataViewRowState.Added);
        adapter.Update(rows);

        return customers;
    }
}
Public Function CreateCmdsAndUpdate(ByVal connectionString As String, _
    ByVal queryString As String) As DataSet

    Using connection As New OleDbConnection(connectionString)
        Dim adapter As New OleDbDataAdapter()
        adapter.SelectCommand = New OleDbCommand(queryString, connection)
        Dim builder As New OleDbCommandBuilder(adapter)

        connection.Open()

        Dim customers As New DataSet()
        adapter.Fill(customers)

        ' Code to modify data in DataSet here 

        ' Insert new records from DataSet
        Dim rows() As DataRow = customers.Tables(0).Select( _
            Nothing, Nothing, DataViewRowState.Added)
        adapter.Update(rows)

        Return customers
    End Using
End Function

注解

当应用程序调用 Update 方法时,DbDataAdapter 会检查 RowState 属性,并根据 DataSet中配置的索引的顺序,以迭代方式对每一行执行所需的 INSERT、UPDATE 或 DELETE 语句。 例如,Update 可能会执行 DELETE 语句,后跟 INSERT 语句,然后执行另一个 DELETE 语句,因为 DataTable中的行的顺序。

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

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

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

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

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

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

  2. 引发 OnRowUpdating 事件。

  3. 该命令执行。

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

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

  6. 引发 OnRowUpdated 事件。

  7. 调用 AcceptChanges。

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

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

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

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

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

注释

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

另请参阅

适用于