HOW TO:更新資料庫中的資料錄
更新:2007 年 11 月
您可以使用 TableAdapter.Update 方法更新 (編輯) 資料庫中的資料錄。TableAdapter.Update 方法會提供多項多載,以便根據傳入的參數執行不同的作業。因此,請務必瞭解呼叫這些不同方法簽章 (Signature) 的結果。
注意事項: |
---|
如果您的應用程式並未使用 TableAdapter,您就可以使用命令物件來更新資料庫中的資料錄 (例如,ExecuteNonQuery)。如需使用命令物件更新資料的詳細資訊,請參閱下列「使用命令物件更新資料錄」。 |
下表將描述各種 TableAdapter.Update 方法的行為:
方法 |
說明 |
---|---|
TableAdapter.Update(DataTable) |
嘗試將 DataTable 中的所有變更儲存至資料庫中 (這包括移除任何從資料表刪除的資料列、加入已插入資料表的資料列,以及更新資料表中已變更的任何資料列)。 |
TableAdapter.Update(DataSet) |
雖然參數會採用資料集,不過 TableAdapter 會嘗試將 TableAdapter 之關聯 DataTable 中的所有變更儲存至資料庫中 (這包括移除任何從資料表刪除的資料列、加入已插入資料表的資料列,以及更新資料表中已變更的任何資料列)。 |
TableAdapter.Update(DataRow) |
嘗試將指定之 DataRow 中的變更儲存至資料庫中。 |
TableAdapter.Update(DataRows()) |
嘗試將 DataRow 陣列中任何資料列的變更儲存至資料庫中。 |
TableAdapter.Update("new column values", "original column values") |
嘗試儲存由原始資料行值所識別之單一資料列中的變更。 |
當應用程式以獨佔方式使用資料集來儲存資料時,您通常會使用採用 DataSet、DataTable 或 DataRow 的 TableAdapter.Update 方法。
當應用程式使用物件來儲存資料時,您通常會使用採用資料行值的 TableAdapter.Update 方法。
如果 TableAdapter 並沒有任何採用資料行值的 Update 方法,就是表示此 TableAdapter 是設定成使用預存程序,或者其 GenerateDBDirectMethods 屬性設定為 false。請嘗試從 DataSet 設計工具之內,將 TableAdapter 的 GenerateDBDirectMethods 屬性設定為 true,然後儲存資料集以重新產生 TableAdapter。如果 TableAdapter 仍然沒有任何採用資料行值的 Update 方法,則此資料表可能無法提供足夠的結構描述資訊,以區別個別的資料列 (例如,資料表上沒有設定任何主索引鍵)。
使用 TableAdapter 更新現有的資料錄
TableAdapter 會根據應用程式的需求,提供不同的方式來更新資料庫中的資料錄。
如果您的應用程式使用資料集儲存資料,您就只要更新所需 DataTable 中的資料錄,然後呼叫 TableAdapter.Update 方法並傳入 DataSet、DataTable、DataRow 或 DataRow 的陣列即可。上表已描述了不同的 Update 方法。
若要使用採用 DataSet、DataTable、DataRow 或 DataRows() 的 TableAdapter.Update 方法更新資料庫中的資料錄
請直接在 DataTable 中編輯 DataRow,藉以編輯所需之 DataTable 中的資料錄。如需詳細資訊,請參閱 HOW TO:編輯 DataTable 中的資料列。
在 DataTable 中編輯資料列之後,請呼叫 TableAdapter.Update 方法。您可以傳入整個 DataSet、DataTable、DataRow 的陣列,或是單一 DataRow,藉以控制要更新的資料量。
下列程式碼將示範如何編輯 DataTable 中的資料錄,然後呼叫 TableAdapter.Update 方法,將變更儲存至資料庫中 (此範例會使用 Northwind 資料庫的 Region 資料表)。
' Locate the row you want to update. Dim regionRow As NorthwindDataSet.RegionRow regionRow = NorthwindDataSet._Region.FindByRegionID(1) ' Assign the new value to the desired column. regionRow.RegionDescription = "East" ' Save the updated row to the database Me.RegionTableAdapter.Update(Me.NorthwindDataSet._Region)
// Locate the row you want to update. NorthwindDataSet.RegionRow regionRow; regionRow = northwindDataSet.Region.FindByRegionID(1); // Assign the new value to the desired column. regionRow.RegionDescription = "East"; // Save the updated row to the database. this.regionTableAdapter.Update(this.northwindDataSet.Region);
如果您的應用程式會使用物件在應用程式中儲存資料,您就可以使用 TableAdapter 的 DBDirect 方法,直接將物件中的資料傳送至資料庫中。這些方法可讓您傳遞每個資料行的個別值,做為方法參數。呼叫這個方法時,就會使用傳入方法的資料行值,更新資料庫中的現有資料錄。
下列程序會使用 Northwind Region 資料表做為範例。
若要使用採用資料行值的 TableAdapter.Update 方法更新資料庫中的資料錄
請呼叫 TableAdapter 的 Update 方法,並傳入每個資料行的新值和原始值做為參數。
注意事項: 如果您沒有可用的執行個體,請針對您想使用的 TableAdapter 執行個體化。
Dim regionTableAdapter As New NorthwindDataSetTableAdapters.RegionTableAdapter regionTableAdapter.Update(1, "East", 1, "Eastern")
NorthwindDataSetTableAdapters.RegionTableAdapter regionTableAdapter = new NorthwindDataSetTableAdapters.RegionTableAdapter(); regionTableAdapter.Update(1, "East", 1, "Eastern");
使用命令物件更新資料錄
下列範例會使用命令物件,直接更新資料庫中的現有資料錄。如需使用命令物件來執行命令和預存程序 (Stored Procedure) 的詳細資訊,請參閱將資料擷取至您的應用程式中。
下列程序會使用 Northwind Region 資料表做為範例。
若要使用命令物件更新資料庫中的現有資料錄
請建立新的命令物件、設定其 Connection、CommandType 和 CommandText 屬性,然後開啟連接並執行命令。
Dim sqlConnection1 As New System.Data.SqlClient.SqlConnection("YOUR CONNECTION STRING") Dim cmd As New System.Data.SqlClient.SqlCommand cmd.CommandType = System.Data.CommandType.Text cmd.CommandText = "UPDATE Region SET RegionID = 1, RegionDescription = 'East' WHERE RegionID = 1" cmd.Connection = sqlConnection1 sqlConnection1.Open() cmd.ExecuteNonQuery() sqlConnection1.Close()
System.Data.SqlClient.SqlConnection sqlConnection1 = new System.Data.SqlClient.SqlConnection("YOUR CONNECTION STRING"); System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(); cmd.CommandType = System.Data.CommandType.Text; cmd.CommandText = "UPDATE Region SET RegionID = 1, RegionDescription = 'East' WHERE RegionID = 1"; cmd.Connection = sqlConnection1; sqlConnection1.Open(); cmd.ExecuteNonQuery(); sqlConnection1.Close();
安全性
您必須擁有嘗試連接之資料庫的存取權,以及在所需資料表中更新資料錄的使用權限。