DbDataAdapter.Update 方法

定义

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

重载

Update(DataSet, String)

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

通过为具有指定名称 DataSetDataTable 中的每个已插入、已更新或已删除的行执行相应的 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行的顺序是 。

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

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

方法Update支持包含多个DataTable对象的方案,DataSet这些对象的名称仅因大小写而异。 如果 中存在 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 每个命令通常都有一个与之关联的参数集合。 参数通过SourceColumn.NET Framework数据提供程序的 Parameter 类的 和 SourceVersion 属性映射到当前行。 SourceColumnDataTable引用引用的列DbDataAdapter以获取当前行的参数值。

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

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

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

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

注意

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

另请参阅

适用于

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行的顺序是 。

应注意的是,这些语句不是作为批处理执行的;每一行都单独更新。 在必须控制语句类型 (序列的情况下,应用程序可以调用 GetChanges 方法,例如,在 UPDATEEs) 之前,INSERT。 有关详细信息,请参阅使用 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

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

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

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

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

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

注意

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

另请参阅

适用于

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行的顺序。

应注意的是,这些语句不是作为批处理执行的;每一行都单独更新。 在必须控制语句类型序列的情况下,应用程序可以调用 GetChanges 方法 (例如,在 UPDATEEs) 之前的 INSERT。 有关详细信息,请参阅使用 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

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

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

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

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

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

注意

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

另请参阅

适用于

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行的顺序。

应注意的是,这些语句不是作为批处理执行的;每一行都单独更新。 在必须控制语句类型序列的情况下,应用程序可以调用 GetChanges 方法 (例如,在 UPDATEEs) 之前的 INSERT。 有关详细信息,请参阅使用 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

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

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

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

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

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

注意

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

另请参阅

适用于

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行的顺序是 。

应注意的是,这些语句不是作为批处理执行的;每一行都单独更新。 在必须控制语句类型 (序列的情况下,应用程序可以调用 GetChanges 方法,例如,在 UPDATEEs) 之前,INSERT。 有关详细信息,请参阅使用 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

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

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

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

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

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

注意

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

另请参阅

适用于