DbDataAdapter.Update 方法   
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
通过对 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
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 -> intPublic Function Update (dataSet As DataSet, srcTable As String) As Integer参数
- 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 属性,则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来自动生成单表更新的 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时,执行顺序如下所示:
- DataRow 中的值将移动到参数值。 
- 引发 OnRowUpdating 事件。 
- 该命令执行。 
- 如果命令设置为 - FirstReturnedRecord,则将第一个返回的结果放置在 DataRow中。
- 如果有输出参数,则它们放置在 DataRow中。 
- 引发 OnRowUpdated 事件。 
- 调用 AcceptChanges。 
与 DbDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。 参数通过 .NET Framework 数据提供程序 Parameter 类的 SourceColumn 和 SourceVersion 属性映射到当前行。 
              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 事件中生成异常,请将 RowUpdatedEventArgs 的 Status 属性设置为 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 -> intProtected Overridable Function Update (dataRows As DataRow(), tableMapping As DataTableMapping) As Integer参数
- tableMapping
- DataTableMapping
要使用的 TableMappings 集合。
返回
从 DataRow 对象的数组成功更新的行数。
例外
尝试执行 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 属性,则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来自动生成单表更新的 SQL 语句。 然后,CommandBuilder生成未设置的任何其他 SQL 语句。 此生成逻辑要求 DataSet中存在关键列信息。 有关详细信息,请参阅 使用 CommandBuilders 生成命令。
在执行更新之前,Update 方法从第一个映射中列出的表中检索行。 然后,Update 使用 UpdatedRowSource 属性的值刷新行。 将忽略返回的任何其他行。
将任何数据加载回 DataSet后,将引发 OnRowUpdated 事件,允许用户检查协调的 DataSet 行和命令返回的任何输出参数。 行成功更新后,将接受该行的更改。
使用 Update时,执行顺序如下所示:
- DataRow 中的值将移动到参数值。 
- 引发 OnRowUpdating 事件。 
- 该命令执行。 
- 如果命令设置为 - FirstReturnedRecord,则将第一个返回的结果放置在 DataRow中。
- 如果有输出参数,则它们放置在 DataRow中。 
- 引发 OnRowUpdated 事件。 
- 调用 AcceptChanges。 
与 DbDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。 参数通过 .NET Framework 数据提供程序 Parameter 类的 SourceColumn 和 SourceVersion 属性映射到当前行。 
              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 事件中生成异常,请将 RowUpdatedEventArgs 的 Status 属性设置为 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 -> intPublic Function Update (dataTable As DataTable) As Integer参数
返回
从 DataTable成功更新的行数。
例外
尝试执行 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 属性,则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来自动生成单表更新的 SQL 语句。 然后,CommandBuilder生成未设置的任何其他 SQL 语句。 此生成逻辑要求 DataSet中存在关键列信息。 有关详细信息,请参阅 使用 CommandBuilders 生成命令。
在执行更新之前,Update 方法从第一个映射中列出的表中检索行。 然后,Update 使用 UpdatedRowSource 属性的值刷新行。 将忽略返回的任何其他行。
将任何数据加载回 DataSet后,将引发 OnRowUpdated 事件,允许用户检查协调的 DataSet 行和命令返回的任何输出参数。 行成功更新后,将接受该行的更改。
使用 Update时,执行顺序如下所示:
- DataRow 中的值将移动到参数值。 
- 引发 OnRowUpdating 事件。 
- 该命令执行。 
- 如果命令设置为 - FirstReturnedRecord,则将第一个返回的结果放置在 DataRow中。
- 如果有输出参数,则它们放置在 DataRow中。 
- 引发 OnRowUpdated 事件。 
- 调用 AcceptChanges。 
与 DbDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。 参数通过 .NET Framework 数据提供程序 Parameter 类的 SourceColumn 和 SourceVersion 属性映射到当前行。 
              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 事件中生成异常,请将 RowUpdatedEventArgs 的 Status 属性设置为 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 -> intPublic Overrides Function Update (dataSet As DataSet) As Integer参数
返回
从 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 属性,则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来自动生成单表更新的 SQL 语句。 然后,CommandBuilder生成未设置的任何其他 SQL 语句。 此生成逻辑要求 DataSet中存在关键列信息。 有关详细信息,请参阅 使用 CommandBuilders 生成命令。
在执行更新之前,Update 方法从第一个映射中列出的表中检索行。 然后,Update 使用 UpdatedRowSource 属性的值刷新行。 将忽略返回的任何其他行。
将任何数据加载回 DataSet后,将引发 OnRowUpdated 事件,允许用户检查协调的 DataSet 行和命令返回的任何输出参数。 行成功更新后,将接受该行的更改。
使用 Update时,执行顺序如下所示:
- DataRow 中的值将移动到参数值。 
- 引发 OnRowUpdating 事件。 
- 该命令执行。 
- 如果命令设置为 - FirstReturnedRecord,则将第一个返回的结果放置在 DataRow中。
- 如果有输出参数,则它们放置在 DataRow中。 
- 引发 OnRowUpdated 事件。 
- 调用 AcceptChanges。 
与 DbDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。 参数通过 .NET Framework 数据提供程序 Parameter 类的 SourceColumn 和 SourceVersion 属性映射到当前行。 
              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 事件中生成异常,请将 RowUpdatedEventArgs 的 Status 属性设置为 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[] -> intPublic Function Update (dataRows As DataRow()) As Integer参数
返回
从 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 属性,则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来自动生成单表更新的 SQL 语句。 然后,CommandBuilder生成未设置的任何其他 SQL 语句。 此生成逻辑要求 DataSet中存在关键列信息。 有关详细信息,请参阅 使用 CommandBuilders 生成命令。
在执行更新之前,Update 方法从第一个映射中列出的表中检索行。 然后,Update 使用 UpdatedRowSource 属性的值刷新行。 将忽略返回的任何其他行。
将任何数据加载回 DataSet后,将引发 OnRowUpdated 事件,允许用户检查协调的 DataSet 行和命令返回的任何输出参数。 行成功更新后,将接受该行的更改。
使用 Update时,执行顺序如下所示:
- DataRow 中的值将移动到参数值。 
- 引发 OnRowUpdating 事件。 
- 该命令执行。 
- 如果命令设置为 - FirstReturnedRecord,则第一个返回的结果将放置在 DataRow中。
- 如果有输出参数,则它们放置在 DataRow中。 
- 引发 OnRowUpdated 事件。 
- 调用 AcceptChanges。 
与 DbDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。 参数通过 .NET Framework 数据提供程序 Parameter 类的 SourceColumn 和 SourceVersion 属性映射到当前行。 
              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 事件中生成异常,请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。