共用方式為


DataAdapter.Update(DataSet) 方法

定義

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

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
DataSet

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

傳回

從 中成功更新 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的值重新整理該列。 任何額外的回傳列都被忽略。

在將任何資料載入 DataSetOnRowUpdated ,事件會被觸發,使用者可以檢查已 DataSet 調和的列以及指令回傳的任何輸出參數。 當某一列成功更新後,該列的變更會被接受。

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

  1. 中的值 DataRow 會被移到參數值。

  2. 便會引發 OnRowUpdating 事件。

  3. 指令執行。

  4. 若指令設定為 FirstReturnedRecord,則第一個回傳的結果會被 DataRow放入 。

  5. 若有輸出參數,則置於 DataRow

  6. 便會引發 OnRowUpdated 事件。

  7. 呼叫 DataRow.AcceptChanges。 這將同時提升DataTable.RowChanging更新的事件DataTable.RowChangedDataRow

每個與 DataAdapter 相關聯的指令通常都會有一個參數集合。 參數透過 .NET 資料提供者Parameter類別的 和 SourceVersion 屬性映射到當前列SourceColumnSourceColumn 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屬性設StatusContinue

對於你傳播到資料來源Update的每一欄,都應該在 、 UpdateCommand、 或 DeleteCommand中加入一個參數。InsertCommand SourceColumn參數的屬性應該設為欄位名稱。 此設定表示參數值並非手動設定,而是從當前處理列中的特定欄位取出。

適用於

另請參閱