DataAdapter.Update(DataSet) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
public:
virtual int Update(System::Data::DataSet ^ dataSet);
public:
abstract int Update(System::Data::DataSet ^ dataSet);
public virtual int Update (System.Data.DataSet dataSet);
public abstract int Update (System.Data.DataSet dataSet);
abstract member Update : System.Data.DataSet -> int
override this.Update : System.Data.DataSet -> int
abstract member Update : System.Data.DataSet -> int
Public Overridable Function Update (dataSet As DataSet) As Integer
Public MustOverride Function Update (dataSet As DataSet) As Integer
参数
返回
DataSet 中成功更新的行数。
实现
例外
尝试执行 INSERT、UPDATE 或 DELETE 语句,但没有记录受到影响。
示例
以下示例对数据源使用派生类 OleDbDataAdapterUpdate 。
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 该方法确定 (插入、更新或删除) 对行执行的更改类型。 根据更改的类型, Insert
将执行 、 Update,
或 Delete
命令模板,将修改后的行传播到数据源。 当应用程序调用 Update 方法时, DataAdapter 会检查 RowState 属性,并根据 中 DataSet配置的索引的顺序,以迭代方式为每一行执行所需的 INSERT、UPDATE 或 DELETE 语句。 例如, Update 可能会执行 DELETE 语句,然后执行 INSERT 语句,然后执行另一个 DELETE 语句,因为 中 DataTable行的顺序是 。
应注意的是,这些语句不是作为批处理执行的;每一行都单独更新。 在必须控制语句类型序列的情况下,应用程序可以调用 GetChanges 方法, (例如 UPDATE) 之前的 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 事件。
调用 DataRow.AcceptChanges。 这将为更新DataRow的 引发 DataTable.RowChanging 和 DataTable.RowChanged 事件。
与 关联的 DataAdapter 每个命令通常都有一个与之关联的参数集合。 参数通过 SourceColumn
.NET 数据提供程序类的 Parameter
和 SourceVersion
属性映射到当前行。 SourceColumn
DataTable引用引用的列DataAdapter以获取当前行的参数值。
SourceColumn
是指应用任何表映射之前未映射的列名。 如果 SourceColumn
引用不存在的列,则采取的操作取决于以下 MissingMappingAction 值之一。
枚举值 | 采取的操作 |
---|---|
MissingMappingAction.Passthrough |
如果没有映射,请使用 中的 DataSet 源列名称和表名。 |
MissingMappingAction.Ignore |
SystemException生成 。 显式设置映射时,缺少输入参数的映射通常是错误的结果。 |
MissingMappingAction.Error |
SystemException生成 。 |
属性 SourceColumn
还用于将输出或输入/输出参数的值映射回 DataSet
。 如果引用不存在的列,则会生成异常。
SourceVersion
.NET 数据提供程序的 类的 Parameter
属性确定是使用列值的 Original、Current 还是 Proposed 版本。 此功能通常用于在 UPDATE 语句的 WHERE 子句中包含原始值,以检查乐观并发冲突。
AcceptChanges调用 方法或 AcceptChanges 方法将提交 或 DataTable中的所有DataSet更改。 如果在调用方法之前Update调用了其中任一方法,则调用该方法时Update不会提交任何更改,除非自 调用 或 AcceptChanges 以来AcceptChanges进行了进一步的更改。
注意
如果在更新行时发生错误,则会引发异常并停止执行更新。 若要在遇到错误时继续执行更新操作而不生成异常,请在调用 Update之前将 ContinueUpdateOnErrortrue
属性设置为 。 还可以在 DataAdapter 的事件中 RowUpdated
按行响应错误。 若要继续更新操作而不在 RowUpdated
事件中生成异常,请将 的 RowUpdatedEventArgs 属性设置为 StatusContinue。
对于在 上 Update传播到数据源的每个列,都应将参数添加到 InsertCommand
、 UpdateCommand
或 DeleteCommand
。 参数 SourceColumn
的 属性应设置为列的名称。 此设置指示参数的值不是手动设置的,而是取自当前处理的行中的特定列。