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 陳述式會造成沒有資料錄受影響。
範例
下列範例使用衍生類別 ,將衍生的 類別 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 語句,然後執行另一個 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。 這會同時引發DataTable.RowChanging更新DataRow之的和 DataTable.RowChanged 事件。
與相關聯的 DataAdapter 每個命令通常會有與其相關聯的參數集合。 參數會透過 SourceColumn
.NET 數據提供者類別的 Parameter
和 SourceVersion
屬性,對應至目前的數據列。 SourceColumn
DataTableDataAdapter是指參考以取得目前數據列之參數值的數據行。
SourceColumn
是指套用任何數據表對應之前未對應的數據行名稱。 如果 SourceColumn
參考不存在的數據行,所採取的動作取決於下列 MissingMappingAction 其中一個值。
列舉值 | 已採取的動作 |
---|---|
MissingMappingAction.Passthrough |
如果沒有對應,請使用 中的 DataSet 源數據行名稱和數據表名稱。 |
MissingMappingAction.Ignore |
產生。SystemException 明確設定對應時,輸入參數遺漏的對應通常是錯誤的結果。 |
MissingMappingAction.Error |
產生。SystemException |
屬性 SourceColumn
也可用來將輸出或輸入/輸出參數的值對應回 DataSet
。 如果例外狀況參考不存在的數據行,就會產生例外狀況。
SourceVersion
.NET 數據提供者類別的 Parameter
屬性會決定要使用數據行值的原始、目前或建議版本。 這項功能通常用來在 UPDATE 語句的 WHERE 子句中包含原始值,以檢查開放式並行存取違規。
AcceptChanges呼叫 方法或AcceptChanges方法將會認可 或 DataTable中的所有DataSet變更。 如果在呼叫 方法之前Update呼叫上述任一方法,除非自 或 AcceptChanges 呼叫之後已進行AcceptChanges進一步的變更,否則在呼叫 方法時Update不會認可任何變更。
注意
如果在更新數據列時發生錯誤,則會擲回例外狀況,並停止執行更新。 若要在發生錯誤時繼續更新作業而不產生例外狀況,請在呼叫 之前將 ContinueUpdateOnError 屬性設定為 true
。Update 您也可以在 DataAdapter 事件內 RowUpdated
,依數據列回應錯誤。 若要繼續更新作業而不在事件內 RowUpdated
產生例外狀況,請將 Status 的 RowUpdatedEventArgs 屬性設定為 Continue。
對於您傳播至 上 Update資料來源的每個資料行,應該將參數加入 InsertCommand
、 UpdateCommand
或 DeleteCommand
。 參數 SourceColumn
的 屬性應該設定為數據行的名稱。 此設定表示參數的值不是手動設定,而是取自目前處理之數據列中的特定數據行。
適用於
另請參閱
- ADO.NET 概觀 \(部分機器翻譯\)