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 -> int
Public 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 -> int
Protected 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 -> int
Public 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 -> int
Public 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[] -> int
Public 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。