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的順序。
請注意,這些語句不會當做批處理執行;每個數據列會個別更新。 如果您必須在 UPDATEEs) 之前控制 INSERT (的語句類型順序,應用程式可以呼叫 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
產生例外狀況,請將 Status 的 RowUpdatedEventArgs 屬性設定為 Continue。