IDataAdapter.Update(DataSet) 方法

定義

從命名為 "Table" 之 DataSet 的指定 DataTable 中,為每個插入、更新或刪除的資料列呼叫對應的 INSERT、UPDATE 或 DELETE 陳述式。

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
DataSet

用來更新資料來源的 DataSet

傳回

DataSet 中成功更新的資料列數目。

例外狀況

嘗試執行 INSERT、UPDATE 或 DELETE 陳述式會造成沒有資料錄受影響。

範例

下列範例使用衍生類別 ,將衍生的 類別 OleDbDataAdapter用於 Update 數據源。 這個範例假設您已建立 OleDbDataAdapterDataSet

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 數據提供者的 屬性,您可以建立 SqlCommandBuilderOleDbCommandBuilder 對象來自動產生單一數據表更新的 SQL 語句。 然後,您未設定的任何其他 SQL 語句都會由 CommandBuilder 產生。 此產生邏輯需要在 中 DataSet提供索引鍵數據行資訊。 如需詳細資訊,請參閱 使用 CommandBuilders 產生命令

方法 Update 會先從第一個對應中列出的數據表擷取數據列,然後再執行更新。 接著, Update 會使用 屬性的值 UpdatedRowSource 來更新數據列。 會忽略傳回的任何其他數據列。

將任何數據載入回 DataSet之後, OnRowUpdated 就會引發 事件,讓使用者檢查協調 DataSet 的數據列和命令傳回的任何輸出參數。 成功更新數據列之後,就會接受該數據列的變更。

使用 Update時,執行順序如下所示:

  1. 中的 DataRow 值會移至參數值。

  2. 便會引發 OnRowUpdating 事件。

  3. 命令會執行。

  4. 如果命令設定為 FirstReturnedRecord,則第一個傳回的結果會放在 中 DataRow

  5. 如果有輸出參數,則會將它們放在 中 DataRow

  6. 便會引發 OnRowUpdated 事件。

  7. 呼叫 AcceptChanges

與相關聯的 IDataAdapter 每個命令通常會有與其相關聯的參數集合。 參數會透過 SourceColumn .NET Framework 數據提供者類別Parameter的 和 SourceVersion 屬性,對應至目前的數據列。 SourceColumnDataTableIDataAdapter是指參考以取得目前數據列之參數值的數據行。

SourceColumn 是指套用任何數據表對應之前未對應的數據行名稱。 如果 SourceColumn 參考不存在的數據行,所採取的動作取決於下列 MissingMappingAction 其中一個值。

列舉值 已採取動作
MissingMappingAction.Passthrough 如果沒有對應,請使用 中的 DataSet 源數據行名稱和數據表名稱。
MissingMappingAction.Ignore 產生。SystemException 明確設定對應時,輸入參數遺漏的對應通常是由錯誤所造成。
MissingMappingAction.Error 產生。SystemException

屬性 SourceColumn 也可用來將輸出或輸入/輸出參數的值對應回 DataSet。 如果例外狀況參考不存在的數據行,就會產生例外狀況。

SourceVersion.NET Framework 資料提供者類別的 Parameter 屬性會決定要使用OriginalCurrentProposed 版本的數據行值。 此功能經常用來在 UPDATE 語句的 WHERE 子句中包含原始值,以檢查開放式並行存取違規。

注意

如果在更新數據列時發生錯誤,則會擲回例外狀況,並停止執行更新。 若要在發生錯誤時繼續更新作業而不產生例外狀況,請在呼叫 之前將 ContinueUpdateOnError 屬性設定為 trueUpdate 您也可以在 DataAdapter 事件內 RowUpdated ,依數據列回應錯誤。 若要繼續更新作業而不在事件內 RowUpdated 產生例外狀況,請將 StatusRowUpdatedEventArgs 屬性設定為 Continue

適用於