語言

IDataAdapter.Update(DataSet) 方法

定義

從指定的「資料表」呼叫指定中每個插入、更新或刪除的列DataSetDataTable,對應的 INSERT、UPDATE 或 DELETE 語句。

public:
 int Update(System::Data::DataSet ^ dataSet);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
public int Update(System.Data.DataSet dataSet);
public 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
abstract member Update : System.Data.DataSet -> int
Public Function Update (dataSet As DataSet) As Integer

參數

dataSet
DataSet

它們 DataSet 用來更新資料來源。

傳回

從 中成功更新 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 陳述式,然後再執行 DataTable另一個 DELETE 陳述式,這是因為列序的關係。

請注意,這些語句並非以批次處理方式執行;每一列都會獨立更新。 如果你必須控制語句類型的序列(例如,INSERT 在 UPDATEs 之前),應用程式可以呼叫該 GetChanges 方法。 如需詳細資訊,請參閱 使用 DataAdapters 更新數據源。

若未指定 INSERT、UPDATE 或 DELETE 語句,該 Update 方法會產生例外。 不過,如果你設定 SqlCommandBuilder .NET Framework 資料提供者的屬性,可以建立OleDbCommandBuilder一個 or SelectCommand 物件,自動產生單資料表更新的 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 資料提供者SourceVersion類別的 and Parameter 屬性映射到目前的列。 SourceColumn DataTable指的是用IDataAdapter來取得當前列參數值的欄位。

SourceColumn 指的是尚未映射欄位名稱,尚未套用任何表格映射。 若 SourceColumn 指的是不存在的欄位,所採取的行動取決於以下 MissingMappingAction 其中一個值。

列舉值 採取的行動
MissingMappingAction.Passthrough 如果沒有映射,請使用來源欄位名稱和資料表名稱 DataSet 。
MissingMappingAction.Ignore SystemException A 是生成的。 當映射被明確設定時,輸入參數缺少映射通常是因為錯誤所致。
MissingMappingAction.Error SystemException A 是生成的。

此 SourceColumn 特性也用於將輸出或輸入/輸出參數的值映射回 DataSet。 若異常指向不存在的欄位,則會產生例外。

SourceVersion.NET Framework 資料提供者類別的屬性決定Parameter是否使用Original欄位值的 、 Current或 Proposed 版本。 此功能常用於在 UPDATE 語句的 WHERE 子句中加入原始值,以檢查樂觀並行違規。

Note

若在更新資料列時發生錯誤,會拋出例外並停止執行更新。 若要在遇到錯誤時不產生例外,繼續更新操作,請先將屬性設 ContinueUpdateOnError 為 , true 然後再呼叫 Update。 在發生資料適配器事件時,你也可以依每列 RowUpdated 回應錯誤。 若要繼續更新操作而不在事件中RowUpdated產生例外,請將 的Status屬性設RowUpdatedEventArgs為 Continue。

適用於