DbDataAdapter.Update 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
通过为 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)
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该方法时,检查DbDataAdapterRowState属性,并根据在 中DataSet配置的索引的顺序对每一行以迭代方式执行所需的 INSERT、UPDATE 或 DELETE 语句。 例如, Update 可能会执行 DELETE 语句,后跟 INSERT 语句,然后执行另一个 DELETE 语句,因为行的顺序 DataTable。
应注意的是,这些语句不作为批处理执行;每行单独更新。 应用程序可以在必须控制 (的语句类型序列的情况下调用 GetChanges 该方法,例如,在 UPDATE) 之前插入。 有关详细信息,请参阅使用 DataAdapters 更新数据源。
如果未指定 INSERT、UPDATE 或 DELETE 语句,该方法 Update 将生成异常。 但是,如果设置SelectCommand
.NET Framework数据提供程序的属性,则可以创建或SqlCommandBuilderOleDbCommandBuilder对象来自动生成单表更新的SQL语句。 然后,不会设置的任何其他SQL语句由 CommandBuilder 生成。 此生成逻辑要求关键列信息存在于 .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 每个命令都有一个与其关联的参数集合。 参数通过SourceColumn``SourceVersion
.NET Framework数据提供程序类Parameter
的属性映射到当前行。 SourceColumn
引用 DataTable 用于获取当前行的参数值的列 DbDataAdapter 。
SourceColumn
引用应用任何表映射之前未映射的列名。 如果 SourceColumn
引用不存在的列,则采取的操作取决于以下 MissingMappingAction 值之一。
枚举值 | 采取的操作 |
---|---|
MissingMappingAction.Passthrough |
如果没有映射, DataSet 请使用源列名和表名。 |
MissingMappingAction.Ignore |
生成 A SystemException 。 显式设置映射时,输入参数的缺失映射通常是错误的结果。 |
MissingMappingAction.Error |
生成 A SystemException 。 |
The SourceColumn
property is also used to map the value for output or input/output parameters back to the DataSet
. 如果异常引用不存在的列,则会生成异常。
SourceVersion
.NET Framework数据提供程序Parameter
类的属性确定是使用列值的原始版本、当前版本还是建议版本。 此功能通常用于在 UPDATE 语句的 WHERE 子句中包含原始值,以检查是否存在乐观并发冲突。
备注
如果在更新行时发生错误,则会引发异常并停止执行更新。 若要在遇到错误时继续执行更新操作而不生成异常,请在调用Update之前将ContinueUpdateOnError属性设置为true
该属性。 还可以在 DataAdapter 事件中 RowUpdated
按行响应错误。 若要继续更新操作而不在事件中RowUpdated
生成异常,请将属性RowUpdatedEventArgs设置为 Status Continue。
另请参阅
适用于
Update(DataRow[], DataTableMapping)
通过为指定的 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该方法时,检查DbDataAdapterRowState属性,并根据在 中DataSet配置的索引的顺序对每一行以迭代方式执行所需的 INSERT、UPDATE 或 DELETE 语句。 例如, Update 可能会执行 DELETE 语句,后跟 INSERT 语句,然后执行另一个 DELETE 语句,因为行的顺序 DataTable。
应注意的是,这些语句不作为批处理执行;每行单独更新。 应用程序可以在必须在 UPDATEEs () 之前控制语句类型的序列(例如 INSERT)的情况下调用 GetChanges 该方法。 有关详细信息,请参阅使用 DataAdapters 更新数据源。
如果未指定 INSERT、UPDATE 或 DELETE 语句,该方法 Update 将生成异常。 但是,如果设置SelectCommand
.NET Framework数据提供程序的属性,则可以创建或SqlCommandBuilderOleDbCommandBuilder对象来自动生成单表更新的SQL语句。 然后,不会设置的任何其他SQL语句由 CommandBuilder 生成。 此生成逻辑要求关键列信息存在于 .DataSet 有关详细信息,请参阅 使用 CommandBuilders 生成命令。
在执行更新之前,该方法 Update 从第一个映射中列出的表中检索行。 Update然后,使用UpdatedRowSource属性值刷新行。 将忽略返回的任何其他行。
加载回 DataSet任何数据后, OnRowUpdated 将引发事件,允许用户检查协调 DataSet 的行和命令返回的任何输出参数。 成功更新行后,将接受对该行所做的更改。
使用 Update时,执行顺序如下所示:
中的 DataRow 值将移动到参数值。
引发 OnRowUpdating 事件。
该命令执行。
如果命令设置为
FirstReturnedRecord
,则第一个返回的结果将放在该命令中 DataRow。如果存在输出参数,则它们放置在 .DataRow
引发 OnRowUpdated 事件。
调用 AcceptChanges。
与通常关联的 DbDataAdapter 每个命令都有一个与其关联的参数集合。 参数通过SourceColumn``SourceVersion
.NET Framework数据提供程序类Parameter
的属性映射到当前行。 SourceColumn
引用 DataTable 用于获取当前行的参数值的列 DbDataAdapter 。
SourceColumn
引用应用任何表映射之前未映射的列名。 如果 SourceColumn
引用不存在的列,则采取的操作取决于以下 MissingMappingAction 值之一。
枚举值 | 采取的操作 |
---|---|
MissingMappingAction.Passthrough |
如果没有映射, DataSet 请使用源列名和表名。 |
MissingMappingAction.Ignore |
生成 A SystemException 。 显式设置映射时,输入参数的缺失映射通常是错误的结果。 |
MissingMappingAction.Error |
生成 A SystemException 。 |
The SourceColumn
property is also used to map the value for output or input/output parameters back to the DataSet
. 如果异常引用不存在的列,则会生成异常。
SourceVersion
.NET Framework数据提供程序Parameter
类的属性确定是使用列值的原始版本、当前版本还是建议版本。 此功能通常用于在 UPDATE 语句的 WHERE 子句中包含原始值,以检查是否存在乐观并发冲突。
备注
如果在更新行时发生错误,则会引发异常并停止执行更新。 若要在遇到错误时继续执行更新操作而不生成异常,请在调用Update之前将ContinueUpdateOnError属性设置为true
该属性。 还可以在 DataAdapter 事件中 RowUpdated
按行响应错误。 若要继续更新操作而不在事件中RowUpdated
生成异常,请将属性RowUpdatedEventArgs设置为 Status Continue。
另请参阅
适用于
Update(DataTable)
通过为指定的 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该方法时,检查DbDataAdapterRowState该属性,并根据在DataSet中配置的索引的顺序,以迭代方式对每一行执行所需的 INSERT、UPDATE 或 DELETE 语句。 例如, Update 可能会执行 DELETE 语句,后跟 INSERT 语句,然后执行另一个 DELETE 语句,因为行的顺序 DataTable。
应指出,这些语句不会作为批处理执行;每行单独更新。 应用程序可以在必须控制语句类型序列的情况下调用 GetChanges 该方法,例如,在 UPDATEEs) 之前,INSERT (。 有关详细信息,请参阅使用 DataAdapters 更新数据源。
如果未指定 INSERT、UPDATE 或 DELETE 语句,该方法 Update 将生成异常。 但是,如果设置SelectCommand
.NET Framework数据提供程序的属性,则可以创建一个SqlCommandBuilder或OleDbCommandBuilder对象来自动生成单表更新的SQL语句。 然后,不会设置的任何其他SQL语句由 CommandBuilder 生成。 此生成逻辑要求关键列信息存在于 。DataSet 有关详细信息,请参阅 使用 CommandBuilders 生成命令。
该方法 Update 在执行更新之前从第一个映射中列出的表中检索行。 Update然后,使用属性的值UpdatedRowSource刷新行。 将忽略返回的任何其他行。
将任何数据加载回 DataSet事件后, OnRowUpdated 将引发该事件,允许用户检查协调 DataSet 行和命令返回的任何输出参数。 成功更新行后,将接受该行的更改。
使用 Update时,执行顺序如下所示:
中的 DataRow 值将移动到参数值。
引发 OnRowUpdating 事件。
该命令执行。
如果命令设置为
FirstReturnedRecord
,则第一个返回的结果将放置在该命令中 DataRow。如果存在输出参数,则它们将放置在其中 DataRow。
引发 OnRowUpdated 事件。
调用 AcceptChanges。
与通常关联的 DbDataAdapter 每个命令都有一个与之关联的参数集合。 参数通过SourceColumn``SourceVersion
.NET Framework数据提供程序类Parameter
的属性映射到当前行。 SourceColumn
引用 DataTable 引用以获取当前行的参数值的列 DbDataAdapter 。
SourceColumn
是指在应用任何表映射之前未映射的列名。 如果 SourceColumn
引用不存在的列,则采取的操作取决于以下 MissingMappingAction 值之一。
枚举值 | 采取的操作 |
---|---|
MissingMappingAction.Passthrough |
如果没有映射, DataSet 请使用源列名和表名。 |
MissingMappingAction.Ignore |
生成 A SystemException 。 显式设置映射时,输入参数的缺失映射通常是错误的结果。 |
MissingMappingAction.Error |
生成 A SystemException 。 |
The SourceColumn
property is also used to map the value for output or input/output parameters back to the DataSet
. 如果异常引用不存在的列,则会生成异常。
SourceVersion
.NET Framework数据提供程序Parameter
类的属性确定是使用列值的原始版本、当前版本还是建议版本。 此功能通常用于在 UPDATE 语句的 WHERE 子句中包含原始值,以检查是否存在乐观并发冲突。
备注
如果在更新行时发生错误,则会引发异常并停止执行更新。 若要在遇到错误时继续执行更新操作而不生成异常,请在调用Update之前将ContinueUpdateOnError属性设置为true
该属性。 还可以在 DataAdapter 事件中 RowUpdated
按行响应错误。 若要继续更新操作而不在事件中RowUpdated
生成异常,请将属性RowUpdatedEventArgs设置为 Status Continue。
另请参阅
适用于
Update(DataSet)
通过为指定的 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该方法时,检查DbDataAdapterRowState该属性,并根据在DataSet中配置的索引的顺序,以迭代方式对每一行执行所需的 INSERT、UPDATE 或 DELETE 语句。 例如, Update 可能会执行 DELETE 语句,后跟 INSERT 语句,然后执行另一个 DELETE 语句,因为行的顺序 DataTable。
应指出,这些语句不会作为批处理执行;每行单独更新。 应用程序可以在必须控制语句类型序列的情况下调用 GetChanges 该方法,例如,在 UPDATEEs) 之前,INSERT (。 有关详细信息,请参阅使用 DataAdapters 更新数据源。
如果未指定 INSERT、UPDATE 或 DELETE 语句,该方法 Update 将生成异常。 但是,如果设置SelectCommand
.NET Framework数据提供程序的属性,则可以创建一个SqlCommandBuilder或OleDbCommandBuilder对象来自动生成单表更新的SQL语句。 然后,不会设置的任何其他SQL语句由 CommandBuilder 生成。 此生成逻辑要求关键列信息存在于 。DataSet 有关详细信息,请参阅 使用 CommandBuilders 生成命令。
该方法 Update 在执行更新之前从第一个映射中列出的表中检索行。 Update然后,使用属性的值UpdatedRowSource刷新行。 将忽略返回的任何其他行。
将任何数据加载回 DataSet事件后, OnRowUpdated 将引发该事件,允许用户检查协调 DataSet 行和命令返回的任何输出参数。 成功更新行后,将接受该行的更改。
使用 Update时,执行顺序如下所示:
中的 DataRow 值将移动到参数值。
引发 OnRowUpdating 事件。
该命令执行。
如果命令设置为
FirstReturnedRecord
,则第一个返回的结果将放置在该命令中 DataRow。如果存在输出参数,则它们将放置在其中 DataRow。
引发 OnRowUpdated 事件。
调用 AcceptChanges。
与通常关联的 DbDataAdapter 每个命令都有一个与之关联的参数集合。 参数通过SourceColumn``SourceVersion
.NET Framework数据提供程序类Parameter
的属性映射到当前行。 SourceColumn
引用 DataTable 引用以获取当前行的参数值的列 DbDataAdapter 。
SourceColumn
是指在应用任何表映射之前未映射的列名。 如果 SourceColumn
引用不存在的列,则采取的操作取决于以下 MissingMappingAction 值之一。
枚举值 | 采取的操作 |
---|---|
MissingMappingAction.Passthrough |
如果没有映射, DataSet 请使用源列名和表名。 |
MissingMappingAction.Ignore |
生成 A SystemException 。 显式设置映射时,输入参数缺少的映射通常是错误的结果。 |
MissingMappingAction.Error |
生成 A SystemException 。 |
The SourceColumn
property is also used to map the value for output or input/output parameters back to the DataSet
. 如果异常引用不存在的列,则会生成异常。
SourceVersion
.NET Framework数据提供程序Parameter
类的属性确定是使用列值的原始版本、当前版本还是建议版本。 此功能通常用于在 UPDATE 语句的 WHERE 子句中包含原始值,以检查乐观并发冲突。
备注
如果在更新行时出错,则会引发异常,并停止执行更新。 To continue the update operation without generating exceptions when an error is encountered, set the ContinueUpdateOnError property to true
before calling Update. 还可以在 DataAdapter 事件中 RowUpdated
按行响应错误。 若要继续更新操作而不在RowUpdated
事件中生成异常,请将该RowUpdatedEventArgs属性设置为 Status Continue。
另请参阅
适用于
Update(DataRow[])
通过为 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该方法时,检查DbDataAdapterRowState属性,并根据在 中DataSet配置的索引的顺序对每一行以迭代方式执行所需的 INSERT、UPDATE 或 DELETE 语句。 例如, Update 可能会执行 DELETE 语句,后跟 INSERT 语句,然后执行另一个 DELETE 语句,因为行的顺序 DataTable。
应注意的是,这些语句不作为批处理执行;每行单独更新。 应用程序可以在必须在 UPDATEEs () 之前控制语句类型的序列(例如 INSERT)的情况下调用 GetChanges 该方法。 有关详细信息,请参阅使用 DataAdapters 更新数据源。
如果未指定 INSERT、UPDATE 或 DELETE 语句,该方法 Update 将生成异常。 但是,如果设置SelectCommand
.NET Framework数据提供程序的属性,则可以创建或SqlCommandBuilderOleDbCommandBuilder对象来自动生成单表更新的SQL语句。 然后,不会设置的任何其他SQL语句由 CommandBuilder 生成。 此生成逻辑要求关键列信息存在于 .DataSet 有关详细信息,请参阅 使用 CommandBuilders 生成命令。
在执行更新之前,该方法 Update 从第一个映射中列出的表中检索行。 Update然后,使用UpdatedRowSource属性值刷新行。 将忽略返回的任何其他行。
加载回 DataSet任何数据后, OnRowUpdated 将引发事件,允许用户检查协调 DataSet 的行和命令返回的任何输出参数。 成功更新行后,将接受对该行所做的更改。
使用 Update时,执行顺序如下所示:
中的 DataRow 值将移动到参数值。
引发 OnRowUpdating 事件。
该命令执行。
如果命令设置为
FirstReturnedRecord
,则第一个返回的结果将放置在该命令中 DataRow。如果存在输出参数,则它们放置在 .DataRow
引发 OnRowUpdated 事件。
调用 AcceptChanges。
与通常关联的 DbDataAdapter 每个命令都有一个与其关联的参数集合。 参数通过SourceColumn``SourceVersion
.NET Framework数据提供程序类Parameter
的属性映射到当前行。 SourceColumn
引用 DataTable 用于获取当前行的参数值的列 DbDataAdapter 。
SourceColumn
引用应用任何表映射之前未映射的列名。 如果 SourceColumn
引用不存在的列,则采取的操作取决于以下 MissingMappingAction 值之一。
枚举值 | 采取的操作 |
---|---|
MissingMappingAction.Passthrough |
如果没有映射, DataSet 请使用源列名和表名。 |
MissingMappingAction.Ignore |
生成 A SystemException 。 显式设置映射时,输入参数的缺失映射通常是错误的结果。 |
MissingMappingAction.Error |
生成 A SystemException 。 |
The SourceColumn
property is also used to map the value for output or input/output parameters back to the DataSet
. 如果异常引用不存在的列,则会生成异常。
SourceVersion
.NET Framework数据提供程序Parameter
类的属性确定是使用列值的原始版本、当前版本还是建议版本。 此功能通常用于在 UPDATE 语句的 WHERE 子句中包含原始值,以检查是否存在乐观并发冲突。
备注
如果在更新行时发生错误,则会引发异常并停止执行更新。 To continue the update operation without generating exceptions when an error is encountered, set the ContinueUpdateOnError property to true
before calling Update. 还可以在 DataAdapter 事件中 RowUpdated
按行响应错误。 若要继续更新操作而不在RowUpdated
事件中生成异常,请将该RowUpdatedEventArgs属性设置为 Status Continue。