語言

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)

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

透過對指定DataSet名稱的 中DataTable每個插入、更新或刪除的列執行相應的 INSERT、UPDATE 或 DELETE 語句,更新資料庫中的值。

public:
 int Update(System::Data::DataSet ^ dataSet, System::String ^ srcTable);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
public int Update(System.Data.DataSet dataSet, string srcTable);
public int Update(System.Data.DataSet dataSet, string srcTable);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
override this.Update : System.Data.DataSet * string -> int
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 屬性的值重新整理數據列。 任何額外的回傳列都被忽略。

在將任何資料載入 DataSet後 OnRowUpdated ,事件會被觸發,使用者可以檢查已 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屬性設RowUpdatedEventArgs為 Continue。

另請參閱

適用於

Update(DataRow[], DataTableMapping)

來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs
來源:
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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
protected virtual int Update(System.Data.DataRow[] dataRows, System.Data.Common.DataTableMapping tableMapping);
protected virtual int Update(System.Data.DataRow[] dataRows, System.Data.Common.DataTableMapping tableMapping);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
override this.Update : System.Data.DataRow[] * System.Data.Common.DataTableMapping -> int
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 屬性的值重新整理數據列。 任何額外的回傳列都被忽略。

在將任何資料載入 DataSet後 OnRowUpdated ,事件會被觸發,使用者可以檢查已 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屬性設RowUpdatedEventArgs為 Continue。

另請參閱

適用於

Update(DataTable)

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

透過執行指定、更新或刪除的每一列 DataTable的 INSERT、UPDATE 或 DELETE 語句,更新資料庫中的值。

public:
 int Update(System::Data::DataTable ^ dataTable);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
public int Update(System.Data.DataTable dataTable);
public int Update(System.Data.DataTable dataTable);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
override this.Update : System.Data.DataTable -> int
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 屬性的值重新整理數據列。 任何額外的回傳列都被忽略。

在將任何資料載入 DataSet後 OnRowUpdated ,事件會被觸發,使用者可以檢查已 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屬性設RowUpdatedEventArgs為 Continue。

另請參閱

適用於

Update(DataSet)

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

透過執行指定、更新或刪除的每一列 DataSet的 INSERT、UPDATE 或 DELETE 語句,更新資料庫中的值。

public:
 override int Update(System::Data::DataSet ^ dataSet);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
public override int Update(System.Data.DataSet dataSet);
public override int Update(System.Data.DataSet dataSet);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
override this.Update : System.Data.DataSet -> int
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 屬性的值重新整理數據列。 任何額外的回傳列都被忽略。

在將任何資料載入 DataSet後 OnRowUpdated ,事件會被觸發,使用者可以檢查已 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屬性設RowUpdatedEventArgs為 Continue。

另請參閱

適用於

Update(DataRow[])

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

透過執行指定陣列 DataSet中每個插入、更新或刪除的列的 INSERT、UPDATE 或 DELETE 語句,更新資料庫中的值。

public:
 int Update(cli::array <System::Data::DataRow ^> ^ dataRows);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
public int Update(System.Data.DataRow[] dataRows);
public int Update(System.Data.DataRow[] dataRows);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
override this.Update : System.Data.DataRow[] -> int
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 屬性的值重新整理數據列。 任何額外的回傳列都被忽略。

在將任何資料載入 DataSet後 OnRowUpdated ,事件會被觸發,使用者可以檢查已 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屬性設RowUpdatedEventArgs為 Continue。

另請參閱

適用於