TableAdapter 提供应用程序和数据库之间的通信。更具体地说,TableAdapter 连接到数据库,执行查询或存储过程,并返回用返回数据填充的新数据表或是用返回数据填充现有 DataTable。TableAdapter 还用于将更新数据从应用程序发送回数据库。
早期版本的 Visual Studio 的用户可以将 TableAdapter 视为具有内置连接对象并能够包含多个查询的 DataAdapter。每个添加到 TableAdapter 的查询都公开为公共方法,该公共方法就如同对象上的任何其他方法或函数那样进行调用。
除了 DataAdapter 的标准功能外,TableAdapter 还提供其他的类型化方法,这些方法对与关联的类型化 DataTable 共享公共架构的查询进行封装。换句话说,可以在 TableAdapter 上根据需要拥有任意多的查询,只要这些查询返回符合同一架构的数据即可。
在 Visual Studio 的前一版本中,使用 ADO.NET 数据适配器在应用程序和数据库之间通信。数据适配器仍然是 .NET Framework 数据提供程序的一个主要组件,而 TableAdapter 则是设计器生成的组件,它对 DataAdapter 的功能进行了改进。TableAdapter 通常包含 Fill 和 Update 方法,用于获取和更新数据库中的数据。
TableAdapter 是使用“数据集设计器”在强类型数据集中创建的。可以在使用数据源配置向导创建新数据集期间创建 TableAdapter。还可以使用 TableAdapter 配置向导或通过将数据库对象从“服务器资源管理器”拖动到“数据集设计器”上,在现有数据集中创建 TableAdapter。有关更多信息,请参见如何:创建 TableAdapter。
TableAdapter 是使用“数据集设计器”设计的,但生成的 TableAdapter 类并不是作为 DataSet 的嵌套类生成的。它们位于特定于每个数据集的独立命名空间中。例如,如果您有一个名为 NorthwindDataSet 的数据集,与 NorthwindDataSet 中的 DataTable 关联的 TableAdapter 将位于 NorthwindDataSetTableAdapters 命名空间中。要通过编程方法访问特定的 TableAdapter,必须声明 TableAdapter 的新实例。例如:
Dim northwindDataSet As New NorthwindDataSet()
Dim customersTableAdapter As New NorthwindDataSetTableAdapters.CustomersTableAdapter()
customersTableAdapter.Fill(northwindDataSet.Customers)
NorthwindDataSet northwindDataSet = new NorthwindDataSet();
NorthwindDataSetTableAdapters.CustomersTableAdapter customersTableAdapter =
new NorthwindDataSetTableAdapters.CustomersTableAdapter();
customersTableAdapter.Fill(northwindDataSet.Customers);
NorthwindDataSet northwindDataSet = new NorthwindDataSet();
NorthwindDataSetCustomersTableAdapter customersTableAdapter =
new NorthwindDataSetCustomersTableAdapter();
customersTableAdapter.Fill(northwindDataSet.get_Customers());
关联的数据表架构
创建 TableAdapter 时,将使用初始查询或存储过程定义 TableAdapter 的关联 DataTable 的架构。通过调用 TableAdapter 的主 Fill 方法(此方法对 TableAdapter 的关联 DataTable 进行填充),可以执行此初始查询或存储过程。任何对 TableAdapter 的主查询的更改都会反映在关联数据表的架构中。例如,如果将一列从主查询中移除,该列也将从关联的数据表中移除。如果 TableAdapter 的任何附加查询使用的 SQL 语句将返回主查询中没有的列,设计器将尝试同步主查询和附加查询之间的列更改情况。有关更多信息,请参见如何:编辑 TableAdapter。
TableAdapter 更新命令
TableAdapter 的更新功能依赖于有多少信息可用(基于 TableAdapter 向导中提供的主查询)。例如,配置为从多个表(联接)、标量值、视图或聚合函数的结果中获取值的 TableAdapter 最初创建时不具有将更新发送回基础数据库的能力。不过,可以在“属性”窗口中手动配置 INSERT、UPDATE 及 DELETE 命令。
TableAdapter 查询
与标准数据适配器不同,TableAdapter 可以包含多个查询,以填充其关联数据表。只要每个查询所返回数据的架构与其关联数据表的架构相同,您就可以根据应用程序的需要定义任意多个 TableAdapter 查询。这样就能加载满足不同条件的数据。例如,如果应用程序包含一个 customers 表,您可以创建一个查询,使用名字以某个特定字母开头的所有客户填充表,而另一个查询则使用来自同一个州/省的所有客户填充该表。若要用处于给定州/省的客户填充 Customers 表,可以创建一个 FillByState 查询,该查询采用一个针对该州/省值的参数:SELECT * FROM Customers WHERE State = @State。可以通过调用 FillByState 方法并按照以下格式传递参数值来执行该查询:CustomerTableAdapter.FillByState("WA")。有关更多信息,请参见如何:创建 TableAdapter 查询。
除了那些能返回与 TableAdapter 的数据表具有相同架构的数据的查询外,还可添加返回标量值(单值)的查询。例如,即使返回的数据并不符合表的架构,用来返回客户计数的查询 (SELECT Count(*) From Customers) 对 CustomersTableAdapter 也是有效的。
ClearBeforeFill 属性
TableAdapter 添加了一个 DataAdapter 基类所没有的属性。默认情况下,每次执行一个用来填充 TableAdapter 的数据表的查询时,数据会被清除,只将该查询的结果加载到表中。如果要将查询返回的数据添加或合并到数据表的现有数据中,请将 TableAdapter 的 ClearBeforeFill 属性设置为 false。无论是否清除数据,如果需要,都有必要显式地将更新发送回数据库。所以,在执行另一个填充表的查询前,请记住保存任何对表中数据所做的更改。有关更多信息,请参见如何:使用 TableAdapter 更新数据。
TableAdapter 继承
TableAdapter 通过封装经过配置的 DataAdapter,扩展了标准数据适配器的功能。默认情况下,TableAdapter 从 Component 继承,无法强制转换为 DataAdapter 类。将 TableAdapter 强制转换为 DataAdapter 将导致 InvalidCastException。若要更改 TableAdapter 的基类,可以在“数据集设计器”中的 TableAdapter 的 Base Class 属性中键入从 Component 派生的类。
TableAdapter 的方法与属性
TableAdapter 类不是 .NET Framework 的一部分,因此,不能在文档或“对象浏览器”中查找它。它是在设计时使用前面提到的向导之一创建的。创建 TableAdapter 时为其分配的名称基于正在使用的表的名称。例如,基于数据库中名为 Orders 的表创建 TableAdapter 时,此 TableAdapter 会被命名为 OrdersTableAdapter。可以在“数据集设计器”中使用 Name 属性更改 TableAdapter 的类名称。
以下是常用的 TableAdapter 方法和属性:
成员
说明
TableAdapter.Fill
|
用 TableAdapter 的 SELECT 命令的结果填充 TableAdapter 的关联数据表。有关更多信息,请参见如何:使用数据填充数据集。
|
TableAdapter.Update
|
将更改发送回数据库。有关更多信息,请参见如何:使用 TableAdapter 更新数据。
|
TableAdapter.GetData
|
返回一个用数据填充了的新 DataTable。
|
TableAdapter.Insert
|
在数据表中创建新行。有关更多信息,请参见如何:向数据表中添加行。
|
TableAdapter.ClearBeforeFill
|
确定数据表在您调用一个 Fill 方法之前是否被清空。
|
TableAdapter 的更新方法
TableAdapter 使用数据命令读取和写入数据库。TableAdapter 的初始 Fill(主)查询是创建关联数据表的架构的基础,也是与 TableAdapter.Update 方法关联的 InsertCommand、UpdateCommand 和 DeleteCommand 命令的基础。这意味着调用 TableAdapter 的 Update 方法将执行最初配置 TableAdapter 时创建的语句,而不是使用“TableAdapter 查询配置向导”添加的某个附加查询。
当使用 TableAdapter 时,它实际执行与您通常要执行的命令相同的操作。例如,当调用适配器的 Fill 方法时,适配器将执行其 SelectCommand 属性中的数据命令并使用数据读取器(例如,SqlDataReader)将结果集加载到数据表中。与此类似,调用适配器的 Update 方法时,它为数据表中每条更改过的记录执行相应的命令(在 UpdateCommand、InsertCommand 和 DeleteCommand 属性中)。
注意
如果主查询中有足够的信息,生成 TableAdapter 时将默认创建 InsertCommand、UpdateCommand 和 DeleteCommand 命令。如果 TableAdapter 的主查询不只是一个表的 SELECT 语句,设计器可能无法生成 InsertCommand、UpdateCommand 和 DeleteCommand。如果没有生成这些命令,执行 TableAdapter.Update 方法时可能会收到一个错误。
|
TableAdapter GenerateDbDirectMethods
除了 InsertCommand、UpdateCommand 和 DeleteCommand 之外,创建 TableAdapter 时还生成了一些可以直接在数据库上执行的方法。可以直接调用这些方法(TableAdapter.Insert、TableAdapter.Update 和 TableAdapter.Delete)对数据库中的数据进行操作。
如果不想创建这些直接方法,可将 TableAdapter 的“GenerateDbDirectMethods”属性设置为 false(在“属性”窗口中)。添加到 TableAdapter 的附加查询是独立的查询 -- 它们不生成这些方法。
TableAdapter 对可空类型的支持
请参见
相关推荐
TableAdapter是Microsoft Visual Studio中的一个关键组件,主要应用于数据访问层,它在.NET框架的数据绑定和数据处理中扮演着至关重要的角色。TableAdapter的设计目的是为了简化数据库操作,它充当了一个桥梁,连接...
在C#编程中,TableAdapter是一个非常重要的组件,它在.NET Framework的数据访问层扮演着关键角色,尤其是在使用Visual Studio开发数据库驱动的应用程序时。TableAdapter是Microsoft的ADO.NET框架的一部分,它提供了...
这篇教程将深入探讨如何在TableAdapter中使用JOINs来合并多个表的数据,从而提高查询效率并获取更复杂的信息。 首先,TableAdapter是一个自动生成的类,它封装了SQL查询、连接字符串和填充DataSet的方法。当你在...
在.NET框架中,TableAdapter是DataSet的一个组成部分,用于与数据库进行交互,比如填充数据表、执行SQL命令等。然而,由于TableAdapter默认不支持显式事务管理,因此在需要进行多步骤操作且需要保证数据一致性时,...
第七章2:TableAdapter组件访问数据库
"TableAdapter"是Microsoft Visual Studio中的一个组件,主要用于处理.NET Framework中的数据访问。它在ADO.NET架构中扮演着重要角色,帮助开发者从数据库检索、更新或操作数据。当TableAdapter无法连接到服务器时,...
3. **配置TableAdapter**:在Dataset Designer中,右键点击空白区域,选择“添加查询”来配置TableAdapter。在向导中,选择“使用SQL语句”或“使用存储过程”。 4. **创建存储过程**:如果你还没有在数据库中创建...
在ASP.NET 2.0中操作数据:在TableAdapter里使用JOINs
#### 9.1 “填充数据集和查询数据”概述 在C#开发.NET数据库系统中,客户端与中间层编程中的数据访问是一个关键环节。这一章节主要介绍了如何将数据加载到应用程序中,特别是针对数据集的填充与SQL语句的执行。 在...
以下是步骤概述: 1. 在数据库中创建存储过程,该过程应包含JOIN查询以获取所需的数据。 2. 打开Dataset设计器,选择TableAdapter并右键单击以打开“配置”对话框。 3. 选择“使用现有存储过程”,找到刚刚创建的...
在示例代码中,通过FindBy方法找到对应的facultyRow和courseRow,然后调用updatefacultydata和updatecoursedata方法更新数据,最后调用TableAdapter的Update方法提交更改。这种方法可以灵活处理主键变化,因为你可以...
#### 一、概述 本篇文章将深入探讨如何在.NET Compact Framework 2.0(以下简称.NET CF 2.0)环境下利用SQL Mobile进行高效的数据管理。通过一系列实践案例,我们将了解.NET CF 2.0的数据访问模型、Visual Studio ...
#### 概述 在Visual Studio 中开发的应用程序可以连接到几乎任何数据库产品或服务中的数据,无论这些数据位于本地机器、局域网还是公共云、私有云或混合云环境中。这使得Visual Studio 成为一个强大的平台,不仅适用...
#### 一、概述 ADO.NET(ActiveX Data Objects .NET)是Microsoft为.NET框架设计的一组数据访问技术。它提供了一种断开连接的数据访问模式,适用于构建高性能的数据驱动应用程序。本篇文章将根据提供的参考资料,...
#### 概述 本篇文章主要介绍了如何在C#应用程序中使用DataGridView控件与Microsoft Access数据库进行交互,实现数据显示及更新的功能。通过一个简单的示例程序,我们能够了解到如何加载Access数据库到DataGridView...
- 按照“TableAdapter配置向导”的提示操作,直到进入“输入SQL语句”步骤,输入查询语句(例如:“SELECT * FROM 表名”),点击“完成”。 **第五步:自定义TableAdapter** - 删除自动生成的字段(通常只有一个...
VB.NET 数据库基础教程之全面解析 DataAdapter 类 DataAdapter 类是 VB.NET 中数据库开发中一个重要的组件,它扮演着数据库和程序之间的桥梁角色,能够执行 Command 对象,从数据库中检索数据,并将其填充到 ...
6. **使用TableAdapter**:在ASP.NET 2.0页面的代码-behind中,实例化TableAdapter,然后调用生成的方法。例如: ```csharp using (var adapter = new YourDataSetTableAdapters.YourTableAdapter()) { var dataSet...