IDataAdapter.Update(DataSet) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
public:
int Update(System::Data::DataSet ^ dataSet);
public int Update (System.Data.DataSet dataSet);
abstract member Update : System.Data.DataSet -> int
Public Function Update (dataSet As DataSet) As Integer
参数
返回
DataSet 中成功更新的行数。
例外
尝试执行 INSERT、UPDATE 或 DELETE 语句,但没有记录受到影响。
示例
以下示例对数据源使用派生类 OleDbDataAdapter。Update 此示例假定你已创建 OleDbDataAdapter 和 DataSet。
static private DataSet CreateCommandAndUpdate(
string connectionString,
string queryString)
{
DataSet dataSet = new DataSet();
using (OleDbConnection connection =
new OleDbConnection(connectionString))
{
connection.Open();
OleDbDataAdapter adapter =
new OleDbDataAdapter();
adapter.SelectCommand =
new OleDbCommand(queryString, connection);
OleDbCommandBuilder builder =
new OleDbCommandBuilder(adapter);
adapter.Fill(dataSet);
// Code to modify data in the DataSet here.
// Without the OleDbCommandBuilder, this line would fail.
adapter.UpdateCommand = builder.GetUpdateCommand();
adapter.Update(dataSet);
}
return dataSet;
}
Public Function CreateCommandAndUpdate( _
ByVal connectionString As String, _
ByVal queryString As String) As DataSet
Dim dataSet As New DataSet()
Using connection As New OleDbConnection(connectionString)
connection.Open()
Dim adapter As New OleDbDataAdapter()
adapter.SelectCommand = New OleDbCommand( _
queryString, connection)
Dim builder As OleDbCommandBuilder = _
New OleDbCommandBuilder(adapter)
adapter.Fill(dataSet)
' Code to modify the data in the DataSet here.
' Without the OleDbCommandBuilder this line would fail.
builder.GetUpdateCommand()
adapter.Update(dataSet)
End Using
Return dataSet
End Function
注解
当应用程序调用 Update 方法时,会 IDataAdapter 检查 RowState 属性,并根据 中 DataSet配置的索引顺序,对每一行迭代执行所需的 INSERT、UPDATE 或 DELETE 语句。 例如, Update 可能会执行 DELETE 语句,后跟 INSERT 语句,然后执行另一个 DELETE 语句,因为 中 DataTable行的顺序。
请注意,这些语句不是作为批处理执行的;每一行都单独更新。 如果必须控制语句类型的序列 (例如 INSERT 在 UPDATEEs) 之前,应用程序可以调用 GetChanges 方法。 有关详细信息,请参阅使用 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。
与 关联的 IDataAdapter 每个命令通常都有一个与之关联的参数集合。 参数通过SourceColumn
.NET Framework数据提供程序Parameter
类的 和 SourceVersion
属性映射到当前行。
SourceColumn
引用引用 DataTable 的列 IDataAdapter 以获取当前行的参数值。
SourceColumn
是指应用任何表映射之前未映射的列名。 如果 SourceColumn
引用不存在的列,则执行的操作取决于以下 MissingMappingAction 值之一。
枚举值 | 已执行的操作 |
---|---|
MissingMappingAction.Passthrough |
如果没有映射,请使用 中的 DataSet 源列名称和表名。 |
MissingMappingAction.Ignore |
SystemException将生成 。 显式设置映射时,输入参数缺少映射通常是由错误引起的。 |
MissingMappingAction.Error |
SystemException将生成 。 |
属性SourceColumn
还用于将输出或输入/输出参数的值映射回 。DataSet
如果引用不存在的列,则会生成异常。
SourceVersion
.NET Framework数据提供程序类的 Parameter
属性确定是使用 Original
、 Current
还是Proposed
列值的版本。 此功能通常用于在 UPDATE 语句的 WHERE 子句中包含原始值,以检查乐观并发冲突。
注意
如果在更新行时出错,则会引发异常并停止执行更新。 若要在遇到错误时继续执行更新操作而不生成异常,请在调用 之前将 ContinueUpdateOnError 属性设置为 true
。Update 还可以在 DataAdapter 事件中 RowUpdated
按行响应错误。 若要继续更新操作而不在 RowUpdated
事件中生成异常,请将 的 RowUpdatedEventArgs 属性设置为 StatusContinue。