如何:更新数据库中的记录
更新:2007 年 11 月
可以使用 TableAdapter.Update 方法更新(编辑)数据库中的记录。TableAdapter.Update 方法根据传入的参数提供了若干次执行不同操作的重载。了解调用这些不同方法签名的结果非常重要。
说明: |
---|
如果您的应用程序不使用 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。尝试从“数据集设计器”内将 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 中的记录。有关更多信息,请参见如何:编辑数据表中的行。
在 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");
使用命令对象更新记录
下面的示例使用命令对象直接更新数据库中的现有记录。有关使用命令对象执行命令和存储过程的更多信息,请参见将数据获取到应用程序。
以下过程使用 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();
安全性
您必须具有访问正尝试连接到的数据库的权限,以及更新所需表中记录的权限。