共用方式為


DbDataAdapter.Update 方法

定義

針對 DataSet中的每個插入、更新或刪除的數據列,執行個別的 INSERT、UPDATE 或 DELETE 語句,以更新資料庫中的值。

多載

Update(DataSet, String)

使用指定的 DataTable 名稱,針對 DataSet 中每個插入、更新或刪除的數據列執行個別的 INSERT、UPDATE 或 DELETE 語句,以更新資料庫中的值。

Update(DataRow[], DataTableMapping)

針對指定之 DataRow 物件陣列中每個插入、更新或刪除的數據列,執行個別的 INSERT、UPDATE 或 DELETE 語句,以更新資料庫中的值。

Update(DataTable)

針對指定之 DataTable中每個插入、更新或刪除的數據列,執行個別的 INSERT、UPDATE 或 DELETE 語句,以更新資料庫中的值。

Update(DataSet)

針對指定之 DataSet中每個插入、更新或刪除的數據列,執行個別的 INSERT、UPDATE 或 DELETE 語句,以更新資料庫中的值。

Update(DataRow[])

針對 DataSet中指定陣列中每個插入、更新或刪除的數據列,執行個別的 INSERT、UPDATE 或 DELETE 語句,以更新資料庫中的值。

Update(DataSet, String)

來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs

使用指定的 DataTable 名稱,針對 DataSet 中每個插入、更新或刪除的數據列執行個別的 INSERT、UPDATE 或 DELETE 語句,以更新資料庫中的值。

public:
 int Update(System::Data::DataSet ^ dataSet, System::String ^ srcTable);
public int Update (System.Data.DataSet dataSet, string srcTable);
override this.Update : System.Data.DataSet * string -> int
Public Function Update (dataSet As DataSet, srcTable As String) As Integer

參數

dataSet
DataSet

用來更新數據源的 DataSet

srcTable
String

要用於數據表對應的源數據表名稱。

傳回

DataSet成功更新的數據列數目。

例外狀況

源數據表無效。

嘗試執行 INSERT、UPDATE 或 DELETE 語句會導致零筆記錄受到影響。

範例

下列範例會使用衍生類別 OleDbDataAdapter來更新數據源。

public DataSet CreateCmdsAndUpdate(string connectionString,
    string queryString, string tableName)
{
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        adapter.SelectCommand = new OleDbCommand(queryString, connection);
        OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

        connection.Open();

        DataSet customers = new DataSet();
        adapter.Fill(customers);

        //code to modify data in dataset here

        adapter.Update(customers, tableName);

        return customers;
    }
}
Public Function CreateCmdsAndUpdate(ByVal connectionString As String, _
    ByVal queryString As String, _
    ByVal tableName As String) As DataSet

    Using connection As New OleDbConnection(connectionString)
        Dim adapter As New OleDbDataAdapter()
        adapter.SelectCommand = New OleDbCommand(queryString, connection)
        Dim builder As New OleDbCommandBuilder(adapter)

        connection.Open()

        Dim customers As New DataSet()
        adapter.Fill(customers)

        ' Code to modify data in DataSet here 

        adapter.Update(customers, tableName)

        Return customers
    End Using
End Function

備註

當應用程式呼叫 Update 方法時,DbDataAdapter 會檢查 RowState 屬性,並根據 DataSet中所設定的索引順序,反覆執行每個數據列所需的 INSERT、UPDATE 或 DELETE 語句。 例如,Update 可能會執行 DELETE 語句,後面接著 INSERT 語句,然後執行另一個 DELETE 語句,因為 DataTable中的數據列順序。

請注意,這些語句不會以批處理方式執行;每個數據列都會個別更新。 應用程式可以在您必須控制語句類型的序列時呼叫 GetChanges 方法(例如 UPDATE 之前的 INSERT)。 如需詳細資訊,請參閱 使用 DataAdapters 更新資料來源

如果尚未指定 INSERT、UPDATE 或 DELETE 語句,則 Update 方法會產生例外狀況。 不過,如果您設定 .NET Framework 數據提供者的 SelectCommand 屬性,您可以建立 SqlCommandBuilderOleDbCommandBuilder 對象,自動產生單一數據表更新的 SQL 語句。 然後,您未設定的任何其他 SQL 語句都會由 CommandBuilder產生。 此產生邏輯需要在 DataSet中提供索引鍵數據行資訊。 如需詳細資訊,請參閱使用 CommandBuilders產生命令

Update 方法支援案例,其中 DataSet 包含多個 DataTable 物件,其名稱只有大小寫不同。 當多個具有相同名稱但不同大小寫的數據表存在於 DataSet中時,Update 會執行區分大小寫的比較來尋找對應的數據表,並在沒有完全相符的情況下產生例外狀況。 下列 C# 程式代碼說明此行為。

DataSet ds = new DataSet();  
 ds.Tables.Add("aaa");  
 ds.Tables.Add("AAA");  
 adapter.Update(ds, "aaa"); // Updates "aaa", which already exists in the DataSet.  
 adapter.Update(ds, "AAA"); // Updates "AAA", which already exists in the DataSet.  
    adapter.Update(ds, "Aaa"); // Results in an exception.  

如果呼叫 Update,且 DataSet 只包含一個名稱只有大小寫不同之 DataTable,則會更新該 DataTable。 在此案例中,比較不區分大小寫。 下列 C# 程式代碼說明此行為。

DataSet dataset = new DataSet();  
 dataset.Tables.Add("aaa");  
    adapter.Update(dataset, "AAA"); // Updates table "aaa" because only one similarly named table is in the DataSet.  

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

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

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

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

  2. 引發 OnRowUpdating 事件。

  3. 命令會執行。

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

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

  6. 引發 OnRowUpdated 事件。

  7. 呼叫 AcceptChanges

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

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

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

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

.NET Framework 數據提供者 Parameter 類別的 SourceVersion 屬性會決定要使用數據行值的原始、目前或建議版本。 這項功能通常用來在 UPDATE 語句的 WHERE 子句中包含原始值,以檢查開放式並行存取違規。

注意

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

另請參閱

適用於

Update(DataRow[], DataTableMapping)

來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs

針對指定之 DataRow 物件陣列中每個插入、更新或刪除的數據列,執行個別的 INSERT、UPDATE 或 DELETE 語句,以更新資料庫中的值。

protected:
 virtual int Update(cli::array <System::Data::DataRow ^> ^ dataRows, System::Data::Common::DataTableMapping ^ tableMapping);
protected virtual int Update (System.Data.DataRow[] dataRows, System.Data.Common.DataTableMapping tableMapping);
override this.Update : System.Data.DataRow[] * System.Data.Common.DataTableMapping -> int
Protected Overridable Function Update (dataRows As DataRow(), tableMapping As DataTableMapping) As Integer

參數

dataRows
DataRow[]

用來更新數據源之 DataRow 物件的陣列。

tableMapping
DataTableMapping

要使用的 TableMappings 集合。

傳回

DataRow 對象的陣列成功更新的數據列數目。

例外狀況

源數據表無效。

沒有要更新的 DataRow

-或-

沒有要更新的 DataTable

-或-

不存在 DataSet 做為來源。

嘗試執行 INSERT、UPDATE 或 DELETE 語句會導致零筆記錄受到影響。

備註

當應用程式呼叫 Update 方法時,DbDataAdapter 會檢查 RowState 屬性,並根據 DataSet中所設定的索引順序,反覆執行每個數據列所需的 INSERT、UPDATE 或 DELETE 語句。 例如,Update 可能會執行 DELETE 語句,後面接著 INSERT 語句,然後執行另一個 DELETE 語句,因為 DataTable中的數據列順序。

請注意,這些語句不會以批處理方式執行;每個數據列都會個別更新。 應用程式可以在您必須控制語句類型的序列時呼叫 GetChanges 方法(例如,UPDATEEs 之前的 INSERT)。 如需詳細資訊,請參閱 使用 DataAdapters 更新資料來源

如果尚未指定 INSERT、UPDATE 或 DELETE 語句,則 Update 方法會產生例外狀況。 不過,如果您設定 .NET Framework 數據提供者的 SelectCommand 屬性,您可以建立 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

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

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

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

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

.NET Framework 數據提供者 Parameter 類別的 SourceVersion 屬性會決定要使用數據行值的原始、目前或建議版本。 這項功能通常用來在 UPDATE 語句的 WHERE 子句中包含原始值,以檢查開放式並行存取違規。

注意

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

另請參閱

適用於

Update(DataTable)

來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs

針對指定之 DataTable中每個插入、更新或刪除的數據列,執行個別的 INSERT、UPDATE 或 DELETE 語句,以更新資料庫中的值。

public:
 int Update(System::Data::DataTable ^ dataTable);
public int Update (System.Data.DataTable dataTable);
override this.Update : System.Data.DataTable -> int
Public Function Update (dataTable As DataTable) As Integer

參數

dataTable
DataTable

用來更新數據源的 DataTable

傳回

DataTable成功更新的數據列數目。

例外狀況

源數據表無效。

沒有要更新的 DataRow

-或-

沒有要更新的 DataTable

-或-

不存在 DataSet 做為來源。

嘗試執行 INSERT、UPDATE 或 DELETE 語句會導致零筆記錄受到影響。

範例

下列範例會使用衍生類別 OleDbDataAdapter來更新數據源。

public DataTable CreateCmdsAndUpdate(string connectionString,
    string queryString)
{
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        adapter.SelectCommand = new OleDbCommand(queryString, connection);
        OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

        connection.Open();

        DataTable customers = new DataTable();
        adapter.Fill(customers);

        // code to modify data in DataTable here

        adapter.Update(customers);

        return customers;
    }
}
Public Function CreateCmdsAndUpdate(ByVal connectionString As String, _
    ByVal queryString As String) As DataTable

    Using connection As New OleDbConnection(connectionString)
        Dim adapter As New OleDbDataAdapter()
        adapter.SelectCommand = New OleDbCommand(queryString, connection)
        Dim builder As New OleDbCommandBuilder(adapter)

        connection.Open()

        Dim customers As New DataTable()
        adapter.Fill(customers)

        ' Code to modify data in DataTable here 

        adapter.Update(customers)
        Return customers
    End Using
End Function

備註

當應用程式呼叫 Update 方法時,DbDataAdapter 會檢查 RowState 屬性,並根據 DataSet中所設定的索引順序,反覆執行每個數據列所需的 INSERT、UPDATE 或 DELETE 語句。 例如,Update 可能會執行 DELETE 語句,後面接著 INSERT 語句,然後執行另一個 DELETE 語句,因為 DataTable中的數據列順序。

請注意,這些語句不會以批處理方式執行;每個數據列都會個別更新。 應用程式可以在您必須控制語句類型的序列時呼叫 GetChanges 方法(例如,UPDATEEs 之前的 INSERT)。 如需詳細資訊,請參閱 使用 DataAdapters 更新資料來源

如果尚未指定 INSERT、UPDATE 或 DELETE 語句,則 Update 方法會產生例外狀況。 不過,如果您設定 .NET Framework 數據提供者的 SelectCommand 屬性,您可以建立 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

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

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

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

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

.NET Framework 數據提供者 Parameter 類別的 SourceVersion 屬性會決定要使用數據行值的原始、目前或建議版本。 這項功能通常用來在 UPDATE 語句的 WHERE 子句中包含原始值,以檢查開放式並行存取違規。

注意

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

另請參閱

適用於

Update(DataSet)

來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs

針對指定之 DataSet中每個插入、更新或刪除的數據列,執行個別的 INSERT、UPDATE 或 DELETE 語句,以更新資料庫中的值。

public:
 override int Update(System::Data::DataSet ^ dataSet);
public override int Update (System.Data.DataSet dataSet);
override this.Update : System.Data.DataSet -> int
Public Overrides Function Update (dataSet As DataSet) As Integer

參數

dataSet
DataSet

用來更新數據源的 DataSet

傳回

DataSet成功更新的數據列數目。

實作

例外狀況

源數據表無效。

嘗試執行 INSERT、UPDATE 或 DELETE 語句會導致零筆記錄受到影響。

範例

下列範例會使用衍生類別 OleDbDataAdapter來更新數據源。

public DataSet CreateCmdsAndUpdate(string connectionString,
    string queryString)
{
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        adapter.SelectCommand = new OleDbCommand(queryString, connection);
        OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

        connection.Open();

        DataSet customers = new DataSet();
        adapter.Fill(customers);

        //code to modify data in dataset here

        adapter.Update(customers);

        return customers;
    }
}
Public Function CreateCmdsAndUpdate(ByVal connectionString As String, _
    ByVal queryString As String) As DataSet

    Using connection As New OleDbConnection(connectionString)
        Dim adapter As New OleDbDataAdapter()
        adapter.SelectCommand = New OleDbCommand(queryString, connection)
        Dim builder As New OleDbCommandBuilder(adapter)

        connection.Open()

        Dim customers As New DataSet()
        adapter.Fill(customers)

        ' Code to modify data in DataSet here 

        adapter.Update(customers)

        Return customers
    End Using
End Function

備註

當應用程式呼叫 Update 方法時,DbDataAdapter 會檢查 RowState 屬性,並根據 DataSet中所設定的索引順序,反覆執行每個數據列所需的 INSERT、UPDATE 或 DELETE 語句。 例如,Update 可能會執行 DELETE 語句,後面接著 INSERT 語句,然後執行另一個 DELETE 語句,因為 DataTable中的數據列順序。

請注意,這些語句不會以批處理方式執行;每個數據列都會個別更新。 應用程式可以在您必須控制語句類型的序列時呼叫 GetChanges 方法(例如,UPDATEEs 之前的 INSERT)。 如需詳細資訊,請參閱 使用 DataAdapters 更新資料來源

如果尚未指定 INSERT、UPDATE 或 DELETE 語句,則 Update 方法會產生例外狀況。 不過,如果您設定 .NET Framework 數據提供者的 SelectCommand 屬性,您可以建立 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

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

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

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

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

.NET Framework 數據提供者 Parameter 類別的 SourceVersion 屬性會決定要使用數據行值的原始、目前或建議版本。 這項功能通常用來在 UPDATE 語句的 WHERE 子句中包含原始值,以檢查開放式並行存取違規。

注意

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

另請參閱

適用於

Update(DataRow[])

來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs

針對 DataSet中指定陣列中每個插入、更新或刪除的數據列,執行個別的 INSERT、UPDATE 或 DELETE 語句,以更新資料庫中的值。

public:
 int Update(cli::array <System::Data::DataRow ^> ^ dataRows);
public int Update (System.Data.DataRow[] dataRows);
override this.Update : System.Data.DataRow[] -> int
Public Function Update (dataRows As DataRow()) As Integer

參數

dataRows
DataRow[]

用來更新數據源之 DataRow 物件的陣列。

傳回

DataSet成功更新的數據列數目。

例外狀況

源數據表無效。

沒有要更新的 DataRow

-或-

沒有要更新的 DataTable

-或-

不存在 DataSet 做為來源。

嘗試執行 INSERT、UPDATE 或 DELETE 語句會導致零筆記錄受到影響。

範例

下列範例會使用衍生類別 OleDbDataAdapter來更新數據源。

public DataSet CreateCmdsAndUpdate(string connectionString,
    string queryString)
{
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        adapter.SelectCommand = new OleDbCommand(queryString, connection);
        OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

        connection.Open();

        DataSet customers = new DataSet();
        adapter.Fill(customers);

        //code to modify data in dataset here

        //Insert new records from DataSet
        DataRow[] rows = customers.Tables[0].Select(
            null, null, DataViewRowState.Added);
        adapter.Update(rows);

        return customers;
    }
}
Public Function CreateCmdsAndUpdate(ByVal connectionString As String, _
    ByVal queryString As String) As DataSet

    Using connection As New OleDbConnection(connectionString)
        Dim adapter As New OleDbDataAdapter()
        adapter.SelectCommand = New OleDbCommand(queryString, connection)
        Dim builder As New OleDbCommandBuilder(adapter)

        connection.Open()

        Dim customers As New DataSet()
        adapter.Fill(customers)

        ' Code to modify data in DataSet here 

        ' Insert new records from DataSet
        Dim rows() As DataRow = customers.Tables(0).Select( _
            Nothing, Nothing, DataViewRowState.Added)
        adapter.Update(rows)

        Return customers
    End Using
End Function

備註

當應用程式呼叫 Update 方法時,DbDataAdapter 會檢查 RowState 屬性,並根據 DataSet中所設定的索引順序,反覆執行每個數據列所需的 INSERT、UPDATE 或 DELETE 語句。 例如,Update 可能會執行 DELETE 語句,後面接著 INSERT 語句,然後執行另一個 DELETE 語句,因為 DataTable中的數據列順序。

請注意,這些語句不會以批處理方式執行;每個數據列都會個別更新。 應用程式可以在您必須控制語句類型的序列時呼叫 GetChanges 方法(例如,UPDATEEs 之前的 INSERT)。 如需詳細資訊,請參閱 使用 DataAdapters 更新資料來源

如果尚未指定 INSERT、UPDATE 或 DELETE 語句,則 Update 方法會產生例外狀況。 不過,如果您設定 .NET Framework 數據提供者的 SelectCommand 屬性,您可以建立 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

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

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

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

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

.NET Framework 數據提供者 Parameter 類別的 SourceVersion 屬性會決定要使用數據行值的原始、目前或建議版本。 這項功能通常用來在 UPDATE 語句的 WHERE 子句中包含原始值,以檢查開放式並行存取違規。

注意

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

另請參閱

適用於