DataAdapter.Update(DataSet) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
public:
virtual int Update(System::Data::DataSet ^ dataSet);
public:
abstract int Update(System::Data::DataSet ^ dataSet);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
public virtual int Update(System.Data.DataSet dataSet);
public virtual int Update(System.Data.DataSet dataSet);
public abstract int Update(System.Data.DataSet dataSet);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
abstract member Update : System.Data.DataSet -> int
override this.Update : System.Data.DataSet -> int
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 敘述時,沒有任何紀錄受影響。
範例
以下範例使用導出類別 OleDbDataAdapter,對 Update 資料來源。
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 陳述句,然後再執行 DataTable另一個 DELETE 陳述句,這是因為 中列的排列順序。
值得注意的是,這些語句並非以批次處理方式執行;每一列都會獨立更新。 應用程式可以在必須控制語句類型順序的情況下呼叫該 GetChanges 方法(例如,INSERT 再接 UPDATE)。 如需詳細資訊,請參閱 使用 DataAdapters 更新數據源。
若未指定 INSERT、UPDATE 或 DELETE 語句,該 Update 方法會產生例外。 不過,如果你設定 SelectCommand .NET Framework 資料提供者的屬性,可以建立SqlCommandBuilder一個 or OleDbCommandBuilder 物件,自動產生單資料表更新的 SQL 語句。 接著,任何你未設定的額外 SQL 陳述式會由 CommandBuilder 產生。 此生成邏輯要求關鍵欄位資訊必須存在於 DataSet中。 更多資訊請參閱 使用 CommandBuilders 產生指令。
此 Update 方法會在執行更新前,從第一個映射中列出的資料表中取得資料列。 Update接著會利用屬性UpdatedRowSource的值重新整理該列。 任何額外的回傳列都被忽略。
在將任何資料載入 DataSet後 OnRowUpdated ,事件會被觸發,使用者可以檢查已 DataSet 調和的列以及指令回傳的任何輸出參數。 當某一列成功更新後,該列的變更會被接受。
使用 Update時,執行順序如下:
中的值 DataRow 會被移到參數值。
便會引發 OnRowUpdating 事件。
指令執行。
若指令設定為
FirstReturnedRecord,則第一個回傳的結果會被 DataRow放入 。若有輸出參數,則置於 DataRow。
便會引發 OnRowUpdated 事件。
呼叫 DataRow.AcceptChanges。 這將同時提升DataTable.RowChanging更新的事件DataTable.RowChangedDataRow。
每個與 DataAdapter 相關聯的指令通常都會有一個參數集合。 參數透過 .NET 資料提供者Parameter類別的 和 SourceVersion 屬性映射到當前列SourceColumn。
SourceColumn
DataTable指的是用DataAdapter來取得當前列參數值的欄位。
SourceColumn 指的是尚未映射欄位名稱,尚未套用任何表格映射。 若 SourceColumn 指的是不存在的欄位,所採取的行動取決於以下 MissingMappingAction 其中一個值。
| 列舉值 | 已採取的動作 |
|---|---|
MissingMappingAction.Passthrough |
如果沒有映射,請使用來源欄位名稱和資料表名稱 DataSet 。 |
MissingMappingAction.Ignore |
SystemException A 是生成的。 當映射被明確設定時,輸入參數缺失映射通常是錯誤所致。 |
MissingMappingAction.Error |
SystemException A 是生成的。 |
此 SourceColumn 特性也用於將輸出或輸入/輸出參數的值映射回 DataSet。 若異常指向不存在的欄位,則會產生例外。
SourceVersion.NET 資料提供者Parameter類別的屬性決定了欄位值的原始、現行或提案版本。 此功能常用於在 UPDATE 語句的 WHERE 子句中包含原始值,以檢查樂觀並行違規。
呼叫該AcceptChanges方法AcceptChanges或方法將提交所有在 or DataTable中的DataSet變更。 若在呼叫方法之前Update先呼叫這些方法,則在呼叫時不會有Update變更,除非之後AcceptChangesAcceptChanges或已呼叫過其他變更。
備註
若在更新資料列時發生錯誤,會拋出例外並停止執行更新。 若要在遇到錯誤時不產生例外,繼續更新操作,請先將屬性設 ContinueUpdateOnError 為 , true 然後再呼叫 Update。 在發生資料適配器事件時,你也可以依每列 RowUpdated 回應錯誤。 若要繼續更新操作而不在事件中RowUpdated產生例外,請將 的RowUpdatedEventArgs屬性設Status為 Continue。
對於你傳播到資料來源Update的每一欄,都應該在 、 UpdateCommand、 或 DeleteCommand中加入一個參數。InsertCommand
SourceColumn參數的屬性應該設為欄位名稱。 此設定表示參數值並非手動設定,而是從當前處理列中的特定欄位取出。