DataAdapter.Update(DataSet) 方法

定義

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

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
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 此方法會決定在插入、更新或刪除) (執行變更的類型。 根據變更的類型, InsertDelete 命令範本會執行 以 Update, 將修改的資料列傳播至資料來源。 當應用程式呼叫 Update 方法時,會 DataAdapter 檢查 RowState 屬性,並根據 中所 DataSet 設定的索引順序,反復執行每個資料列的必要 INSERT、UPDATE 或 DELETE 子句。 例如, Update 可能會執行 DELETE 子句,後面接著 INSERT 語句,然後執行另一個 DELETE 子句,因為 中 DataTable 資料列的順序。

請注意,這些語句不會以批次處理方式執行;每個資料列都會個別更新。 應用程式可以在您必須控制語句類型序列的情況下呼叫 GetChanges 方法,例如,UPDATE) 之前,先 (INSERT。 如需詳細資訊,請參閱使用 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. 呼叫 DataRow.AcceptChanges。 這會同時引發 DataTable.RowChanging 更新 DataRow 的 和 DataTable.RowChanged 事件。

與 相關聯的 DataAdapter 每個命令通常都有與其相關聯的參數集合。 參數會透過 SourceColumn .NET 資料提供者類別的 ParameterSourceVersion 屬性,對應至目前的資料列。 SourceColumnDataTableDataAdapter 參考以取得目前資料列之參數值的資料行。

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 屬性設定為 trueUpdate 您也可以在 DataAdapter 事件內 RowUpdated ,根據每個資料列回應錯誤。 若要繼續更新作業,而不在事件內 RowUpdated 產生例外狀況,請將 StatusRowUpdatedEventArgs 屬性設定為 Continue

針對您傳播至 上 Update 資料來源的每個資料行,應該將 參數加入 InsertCommandUpdateCommandDeleteCommand 。 參數 SourceColumn 的 屬性應該設定為數據行的名稱。 此設定表示參數的值不是手動設定,而是取自目前處理資料列中的特定資料行。

適用於

另請參閱