DbDataAdapter.Update 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
針對 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)
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成功更新的數據列數目。
例外狀況
源數據表無效。
嘗試執行 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
屬性,您可以建立 SqlCommandBuilder 或 OleDbCommandBuilder 對象,自動產生單一數據表更新的 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 相關聯的每個命令通常都有與其相關聯的參數集合。 參數會透過 .NET Framework 數據提供者 Parameter
類別的 SourceColumn
和 SourceVersion
屬性對應至目前的數據列。
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
事件中產生例外狀況,請將 RowUpdatedEventArgs 的 Status 屬性設定為 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 對象的陣列成功更新的數據列數目。
例外狀況
源數據表無效。
嘗試執行 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
屬性,您可以建立 SqlCommandBuilder 或 OleDbCommandBuilder 對象,自動產生單一數據表更新的 SQL 語句。 然後,您未設定的任何其他 SQL 語句都會由 CommandBuilder產生。 此產生邏輯需要在 DataSet中提供索引鍵數據行資訊。 如需詳細資訊,請參閱使用 CommandBuilders產生命令
Update 方法會先從第一個對應中列出的數據表擷取數據列,再執行更新。 Update 然後使用 UpdatedRowSource 屬性的值重新整理數據列。 會忽略傳回的任何其他數據列。
將任何數據載入回 DataSet之後,就會引發 OnRowUpdated 事件,讓使用者檢查協調 DataSet 數據列,以及命令傳回的任何輸出參數。 成功更新數據列之後,即會接受該數據列的變更。
使用 Update時,執行順序如下所示:
DataRow 中的值會移至參數值。
引發 OnRowUpdating 事件。
命令會執行。
如果命令設定為
FirstReturnedRecord
,則第一個傳回的結果會放在 DataRow中。如果有輸出參數,它們會放在 DataRow中。
引發 OnRowUpdated 事件。
呼叫 AcceptChanges。
與 DbDataAdapter 相關聯的每個命令通常都有與其相關聯的參數集合。 參數會透過 .NET Framework 數據提供者 Parameter
類別的 SourceColumn
和 SourceVersion
屬性對應至目前的數據列。
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
事件中產生例外狀況,請將 RowUpdatedEventArgs 的 Status 屬性設定為 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成功更新的數據列數目。
例外狀況
源數據表無效。
嘗試執行 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
屬性,您可以建立 SqlCommandBuilder 或 OleDbCommandBuilder 對象,自動產生單一數據表更新的 SQL 語句。 然後,您未設定的任何其他 SQL 語句都會由 CommandBuilder產生。 此產生邏輯需要在 DataSet中提供索引鍵數據行資訊。 如需詳細資訊,請參閱使用 CommandBuilders產生命令
Update 方法會先從第一個對應中列出的數據表擷取數據列,再執行更新。 Update 然後使用 UpdatedRowSource 屬性的值重新整理數據列。 會忽略傳回的任何其他數據列。
將任何數據載入回 DataSet之後,就會引發 OnRowUpdated 事件,讓使用者檢查協調 DataSet 數據列,以及命令傳回的任何輸出參數。 成功更新數據列之後,即會接受該數據列的變更。
使用 Update時,執行順序如下所示:
DataRow 中的值會移至參數值。
引發 OnRowUpdating 事件。
命令會執行。
如果命令設定為
FirstReturnedRecord
,則第一個傳回的結果會放在 DataRow中。如果有輸出參數,它們會放在 DataRow中。
引發 OnRowUpdated 事件。
呼叫 AcceptChanges。
與 DbDataAdapter 相關聯的每個命令通常都有與其相關聯的參數集合。 參數會透過 .NET Framework 數據提供者 Parameter
類別的 SourceColumn
和 SourceVersion
屬性對應至目前的數據列。
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
事件中產生例外狀況,請將 RowUpdatedEventArgs 的 Status 屬性設定為 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 方法會產生例外狀況。 不過,如果您設定 .NET Framework 數據提供者的 SelectCommand
屬性,您可以建立 SqlCommandBuilder 或 OleDbCommandBuilder 對象,自動產生單一數據表更新的 SQL 語句。 然後,您未設定的任何其他 SQL 語句都會由 CommandBuilder產生。 此產生邏輯需要在 DataSet中提供索引鍵數據行資訊。 如需詳細資訊,請參閱使用 CommandBuilders產生命令
Update 方法會先從第一個對應中列出的數據表擷取數據列,再執行更新。 Update 然後使用 UpdatedRowSource 屬性的值重新整理數據列。 會忽略傳回的任何其他數據列。
將任何數據載入回 DataSet之後,就會引發 OnRowUpdated 事件,讓使用者檢查協調 DataSet 數據列,以及命令傳回的任何輸出參數。 成功更新數據列之後,即會接受該數據列的變更。
使用 Update時,執行順序如下所示:
DataRow 中的值會移至參數值。
引發 OnRowUpdating 事件。
命令會執行。
如果命令設定為
FirstReturnedRecord
,則第一個傳回的結果會放在 DataRow中。如果有輸出參數,它們會放在 DataRow中。
引發 OnRowUpdated 事件。
呼叫 AcceptChanges。
與 DbDataAdapter 相關聯的每個命令通常都有與其相關聯的參數集合。 參數會透過 .NET Framework 數據提供者 Parameter
類別的 SourceColumn
和 SourceVersion
屬性對應至目前的數據列。
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
事件中產生例外狀況,請將 RowUpdatedEventArgs 的 Status 屬性設定為 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成功更新的數據列數目。
例外狀況
源數據表無效。
嘗試執行 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
屬性,您可以建立 SqlCommandBuilder 或 OleDbCommandBuilder 對象,自動產生單一數據表更新的 SQL 語句。 然後,您未設定的任何其他 SQL 語句都會由 CommandBuilder產生。 此產生邏輯需要在 DataSet中提供索引鍵數據行資訊。 如需詳細資訊,請參閱使用 CommandBuilders產生命令
Update 方法會先從第一個對應中列出的數據表擷取數據列,再執行更新。 Update 然後使用 UpdatedRowSource 屬性的值重新整理數據列。 會忽略傳回的任何其他數據列。
將任何數據載入回 DataSet之後,就會引發 OnRowUpdated 事件,讓使用者檢查協調 DataSet 數據列,以及命令傳回的任何輸出參數。 成功更新數據列之後,即會接受該數據列的變更。
使用 Update時,執行順序如下所示:
DataRow 中的值會移至參數值。
引發 OnRowUpdating 事件。
命令會執行。
如果命令設定為
FirstReturnedRecord
,則會將第一個傳回的結果放在 DataRow中。如果有輸出參數,它們會放在 DataRow中。
引發 OnRowUpdated 事件。
呼叫 AcceptChanges。
與 DbDataAdapter 相關聯的每個命令通常都有與其相關聯的參數集合。 參數會透過 .NET Framework 數據提供者 Parameter
類別的 SourceColumn
和 SourceVersion
屬性對應至目前的數據列。
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
事件中產生例外狀況,請將 RowUpdatedEventArgs 的 Status 屬性設定為 Continue。