DbDataAdapter.Update 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
針對 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)
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
參數
- 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時,執行順序如下:
中的值 DataRow 會被移到參數值。
便會引發 OnRowUpdating 事件。
指令執行。
如果命令設定為
FirstReturnedRecord,則第一個傳回的結果會放在 DataRow中。如果有輸出參數,它們會放在 DataRow中。
便會引發 OnRowUpdated 事件。
呼叫 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)
透過對指定物件陣列 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
參數
- tableMapping
- DataTableMapping
要使用的 TableMappings 集合。
傳回
從 DataRow 對象的陣列成功更新的數據列數目。
例外狀況
這個 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時,執行順序如下:
中的值 DataRow 會被移到參數值。
便會引發 OnRowUpdating 事件。
指令執行。
如果命令設定為
FirstReturnedRecord,則第一個傳回的結果會放在 DataRow中。如果有輸出參數,它們會放在 DataRow中。
便會引發 OnRowUpdated 事件。
呼叫 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)
透過執行指定、更新或刪除的每一列 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的列數。
例外狀況
這個 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時,執行順序如下:
中的值 DataRow 會被移到參數值。
便會引發 OnRowUpdating 事件。
指令執行。
如果命令設定為
FirstReturnedRecord,則第一個傳回的結果會放在 DataRow中。如果有輸出參數,它們會放在 DataRow中。
便會引發 OnRowUpdated 事件。
呼叫 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)
透過執行指定、更新或刪除的每一列 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的列數。
實作
例外狀況
來源資料表無效。
嘗試執行 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時,執行順序如下:
中的值 DataRow 會被移到參數值。
便會引發 OnRowUpdating 事件。
指令執行。
如果命令設定為
FirstReturnedRecord,則第一個傳回的結果會放在 DataRow中。如果有輸出參數,它們會放在 DataRow中。
便會引發 OnRowUpdated 事件。
呼叫 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[])
透過執行指定陣列 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
參數
傳回
從 中成功更新 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
//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時,執行順序如下:
中的值 DataRow 會被移到參數值。
便會引發 OnRowUpdating 事件。
指令執行。
如果命令設定為
FirstReturnedRecord,則會將第一個傳回的結果放在 DataRow中。如果有輸出參數,它們會放在 DataRow中。
便會引發 OnRowUpdated 事件。
呼叫 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。