DbDataAdapter.Update 方法

定義

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

多載

名稱 Description
Update(DataSet, String)

透過對指定DataSet名稱的 中DataTable每個插入、更新或刪除的列執行相應的 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)

透過對指定DataSet名稱的 中DataTable每個插入、更新或刪除的列執行相應的 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的列數。

例外狀況

這個 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 方法會產生例外。 不過,如果你設定 SqlCommandBuilder .NET Framework 資料提供者的屬性,可以建立OleDbCommandBuilder一個 or SelectCommand 物件,自動產生單資料表更新的 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 屬性的值重新整理數據列。 任何額外的回傳列都被忽略。

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

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

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

  2. 便會引發 OnRowUpdating 事件。

  3. 指令執行。

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

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

  6. 便會引發 OnRowUpdated 事件。

  7. 呼叫 AcceptChanges

DbDataAdapter 相關聯的每個命令通常都有與其相關聯的參數集合。 參數會透過 SourceColumn .NET Framework 資料提供者SourceVersion類別的 and Parameter 屬性映射到目前的列。 SourceColumn DataTable指的是用DbDataAdapter來取得當前列參數值的欄位。

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

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

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

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

Note

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

另請參閱

適用於

Update(DataRow[], DataTableMapping)

透過對指定物件陣列 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 對象的陣列成功更新的數據列數目。

例外狀況

這個 DataSet 是無效的。

來源資料表無效。

沒有要更新的 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 方法會產生例外。 不過,如果你設定 SqlCommandBuilder .NET Framework 資料提供者的屬性,可以建立OleDbCommandBuilder一個 or SelectCommand 物件,自動產生單資料表更新的 SQL 語句。 然後,您未設定的任何其他 SQL 語句都會由 CommandBuilder產生。 此生成邏輯要求關鍵欄位資訊必須存在於 DataSet中。 更多資訊請參閱 使用 CommandBuilders 產生指令

Update 方法會在執行更新前,從第一個映射中列出的資料表中取得資料列。 Update 然後使用 UpdatedRowSource 屬性的值重新整理數據列。 任何額外的回傳列都被忽略。

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

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

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

  2. 便會引發 OnRowUpdating 事件。

  3. 指令執行。

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

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

  6. 便會引發 OnRowUpdated 事件。

  7. 呼叫 AcceptChanges

DbDataAdapter 相關聯的每個命令通常都有與其相關聯的參數集合。 參數會透過 SourceColumn .NET Framework 資料提供者SourceVersion類別的 and Parameter 屬性映射到目前的列。 SourceColumn DataTable指的是用DbDataAdapter來取得當前列參數值的欄位。

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

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

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

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

Note

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

另請參閱

適用於

Update(DataTable)

透過執行指定、更新或刪除的每一列 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的列數。

例外狀況

這個 DataSet 是無效的。

來源資料表無效。

沒有要更新的 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 方法會產生例外。 不過,如果你設定 SqlCommandBuilder .NET Framework 資料提供者的屬性,可以建立OleDbCommandBuilder一個 or SelectCommand 物件,自動產生單資料表更新的 SQL 語句。 然後,您未設定的任何其他 SQL 語句都會由 CommandBuilder產生。 此生成邏輯要求關鍵欄位資訊必須存在於 DataSet中。 更多資訊請參閱 使用 CommandBuilders 產生指令

Update 方法會在執行更新前,從第一個映射中列出的資料表中取得資料列。 Update 然後使用 UpdatedRowSource 屬性的值重新整理數據列。 任何額外的回傳列都被忽略。

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

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

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

  2. 便會引發 OnRowUpdating 事件。

  3. 指令執行。

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

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

  6. 便會引發 OnRowUpdated 事件。

  7. 呼叫 AcceptChanges

DbDataAdapter 相關聯的每個命令通常都有與其相關聯的參數集合。 參數會透過 SourceColumn .NET Framework 資料提供者SourceVersion類別的 and Parameter 屬性映射到目前的列。 SourceColumn DataTable指的是用DbDataAdapter來取得當前列參數值的欄位。

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

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

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

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

Note

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

另請參閱

適用於

Update(DataSet)

透過執行指定、更新或刪除的每一列 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 方法會產生例外。 不過,如果你設定 SqlCommandBuilder .NET Framework 資料提供者的屬性,可以建立OleDbCommandBuilder一個 or SelectCommand 物件,自動產生單資料表更新的 SQL 語句。 然後,您未設定的任何其他 SQL 語句都會由 CommandBuilder產生。 此生成邏輯要求關鍵欄位資訊必須存在於 DataSet中。 更多資訊請參閱 使用 CommandBuilders 產生指令

Update 方法會在執行更新前,從第一個映射中列出的資料表中取得資料列。 Update 然後使用 UpdatedRowSource 屬性的值重新整理數據列。 任何額外的回傳列都被忽略。

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

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

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

  2. 便會引發 OnRowUpdating 事件。

  3. 指令執行。

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

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

  6. 便會引發 OnRowUpdated 事件。

  7. 呼叫 AcceptChanges

DbDataAdapter 相關聯的每個命令通常都有與其相關聯的參數集合。 參數會透過 SourceColumn .NET Framework 資料提供者SourceVersion類別的 and Parameter 屬性映射到目前的列。 SourceColumn DataTable指的是用DbDataAdapter來取得當前列參數值的欄位。

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

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

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

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

Note

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

另請參閱

適用於

Update(DataRow[])

透過執行指定陣列 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的列數。

例外狀況

這個 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 方法會產生例外。 不過,如果你設定 SqlCommandBuilder .NET Framework 資料提供者的屬性,可以建立OleDbCommandBuilder一個 or SelectCommand 物件,自動產生單資料表更新的 SQL 語句。 然後,您未設定的任何其他 SQL 語句都會由 CommandBuilder產生。 此生成邏輯要求關鍵欄位資訊必須存在於 DataSet中。 更多資訊請參閱 使用 CommandBuilders 產生指令

Update 方法會在執行更新前,從第一個映射中列出的資料表中取得資料列。 Update 然後使用 UpdatedRowSource 屬性的值重新整理數據列。 任何額外的回傳列都被忽略。

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

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

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

  2. 便會引發 OnRowUpdating 事件。

  3. 指令執行。

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

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

  6. 便會引發 OnRowUpdated 事件。

  7. 呼叫 AcceptChanges

DbDataAdapter 相關聯的每個命令通常都有與其相關聯的參數集合。 參數會透過 SourceColumn .NET Framework 資料提供者SourceVersion類別的 and Parameter 屬性映射到目前的列。 SourceColumn DataTable指的是用DbDataAdapter來取得當前列參數值的欄位。

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

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

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

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

Note

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

另請參閱

適用於