DbDataAdapter.Update 方法

定义

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

重载

Update(DataSet, String)

通过对具有指定 DataTable 名称的 DataSet 中每个插入、更新或删除的行执行相应的 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

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

public:
 int Update(System::Data::DataSet ^ dataSet, System::String ^ srcTable);
public int Update (System.Data.DataSet dataSet, string srcTable);
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 数据提供程序的 SelectCommand 属性,则可以创建 SqlCommandBuilderOleDbCommandBuilder 对象来自动生成单表更新的 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 数据提供程序 Parameter 类的 SourceColumnSourceVersion 属性映射到当前行。 SourceColumn 引用 DbDataAdapter 引用以获取当前行的参数值的 DataTable 列。

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

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

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

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

注意

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

另请参阅

适用于

Update(DataRow[], DataTableMapping)

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);
protected virtual int Update (System.Data.DataRow[] dataRows, System.Data.Common.DataTableMapping tableMapping);
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 数据提供程序的 SelectCommand 属性,则可以创建 SqlCommandBuilderOleDbCommandBuilder 对象来自动生成单表更新的 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 数据提供程序 Parameter 类的 SourceColumnSourceVersion 属性映射到当前行。 SourceColumn 引用 DbDataAdapter 引用以获取当前行的参数值的 DataTable 列。

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

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

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

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

注意

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

另请参阅

适用于

Update(DataTable)

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

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

public:
 int Update(System::Data::DataTable ^ dataTable);
public int Update (System.Data.DataTable dataTable);
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 数据提供程序的 SelectCommand 属性,则可以创建 SqlCommandBuilderOleDbCommandBuilder 对象来自动生成单表更新的 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 数据提供程序 Parameter 类的 SourceColumnSourceVersion 属性映射到当前行。 SourceColumn 引用 DbDataAdapter 引用以获取当前行的参数值的 DataTable 列。

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

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

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

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

注意

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

另请参阅

适用于

Update(DataSet)

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

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

public:
 override int Update(System::Data::DataSet ^ dataSet);
public override int Update (System.Data.DataSet dataSet);
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 数据提供程序的 SelectCommand 属性,则可以创建 SqlCommandBuilderOleDbCommandBuilder 对象来自动生成单表更新的 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 数据提供程序 Parameter 类的 SourceColumnSourceVersion 属性映射到当前行。 SourceColumn 引用 DbDataAdapter 引用以获取当前行的参数值的 DataTable 列。

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

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

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

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

注意

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

另请参阅

适用于

Update(DataRow[])

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

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

public:
 int Update(cli::array <System::Data::DataRow ^> ^ dataRows);
public int Update (System.Data.DataRow[] dataRows);
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 数据提供程序的 SelectCommand 属性,则可以创建 SqlCommandBuilderOleDbCommandBuilder 对象来自动生成单表更新的 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 数据提供程序 Parameter 类的 SourceColumnSourceVersion 属性映射到当前行。 SourceColumn 引用 DbDataAdapter 引用以获取当前行的参数值的 DataTable 列。

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

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

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

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

注意

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

另请参阅

适用于