如何:更新数据库中的记录

更新:2007 年 11 月

可以使用 TableAdapter.Update 方法更新(编辑)数据库中的记录。TableAdapter.Update 方法根据传入的参数提供了若干次执行不同操作的重载。了解调用这些不同方法签名的结果非常重要。

说明:

如果您的应用程序不使用 TableAdapter,您就可以使用命令对象更新数据库中的记录(例如,ExecuteNonQuery)。有关使用命令对象更新数据的更多信息,请参见下面的“使用命令对象更新记录”。

下表描述了各种 TableAdapter.Update 方法的行为:

方法

说明

TableAdapter.Update(DataTable)

尝试将 DataTable 中的所有更改保存到数据库中。(这包括从表中移除所有删除的行、将插入的行添加到表中、更新表中已更改的所有行。)

TableAdapter.Update(DataSet)

虽然该参数带有一个数据集,但 TableAdapter 仍尝试将 TableAdapter 的关联 DataTable 中的所有更改保存到数据库中。(这包括从表中移除所有删除的行、将插入的行添加到表中、更新表中已更改的所有行。)

说明:

TableAdapter 的关联 DataTable 是最初配置 TableAdapter 时创建的 DataTable

TableAdapter.Update(DataRow)

尝试将指示 DataRow 中的更改保存到数据库中。

TableAdapter.Update(DataRows())

尝试将 DataRow 数组中任意行中的更改保存到数据库中。

TableAdapter.Update("new column values", "original column values")

尝试保存由原始列值标识的单行中的更改。

通常,当应用程序使用数据集以独占方式存储数据时,您使用的是带有 DataSetDataTableDataRow 的 TableAdapter.Update 方法。

通常,当应用程序使用对象存储数据时,您使用的是带有列值的 TableAdapter.Update 方法。

如果 TableAdapter 没有带列值的 Update 方法,就表示已将 TableAdapter 配置为使用存储过程,或者已将它的 GenerateDBDirectMethods 属性设置为 false。尝试从“数据集设计器”内将 TableAdapter 的 GenerateDBDirectMethods 属性设置为 true,然后保存该数据集以重新生成 TableAdapter。如果 TableAdapter 仍没有带列值的 Update 方法,该表就可能没有提供足够多的架构信息以区分各行(例如,未在表中设置任何主键)。

使用 TableAdapter 更新现有记录

根据应用程序的需要,TableAdapter 提供了更新数据库中记录的不同方法。

如果应用程序使用数据集存储数据,您就可以在所需的 DataTable 中简单地更新记录,然后调用 TableAdapter.Update 方法并传入 DataSetDataTableDataRowDataRow 数组。上表描述了不同的 Update 方法。

用带有 DataSet、DataTable、DataRow 或 DataRows() 的 TableAdapter.Update 方法更新数据库中的记录

  1. 通过直接编辑 DataTable 中的 DataRow,编辑所需的 DataTable 中的记录。有关更多信息,请参见如何:编辑数据表中的行

  2. DataTable 中对行进行编辑后,请调用 TableAdapter.Update 方法。通过传入完整的 DataSetDataTableDataRow 数组或单个 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();
    

安全性

您必须具有访问正尝试连接到的数据库的权限,以及更新所需表中记录的权限。

请参见

任务

如何:删除数据库中的记录

如何:将新记录插入数据库

如何:将数据从对象保存到数据库

概念

TableAdapter 概述

其他资源

数据访问入门

连接到 Visual Studio 中的数据

准备应用程序以接收数据

将数据获取到应用程序

在 Windows 应用程序中的窗体上显示数据

在应用程序中编辑数据

验证数据

保存数据