`
zmo_xu
  • 浏览: 63436 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
最近访客 更多访客>>
社区版块
存档分类
最新评论

转帖 TableAdapter 概述

阅读更多

TableAdapter 概述

客户端和中间层编程中的数据访问  
TableAdapter 概述  

 

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 的新实例。例如:

Visual Basic
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 可以包含多个查询,以填充其关联数据表。只要每个查询所返回数据的架构与其关联数据表的架构相同,您就可以根据应用程序的需要定义任意多个 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 方法关联的 InsertCommandUpdateCommand 和 DeleteCommand 命令的基础。这意味着调用 TableAdapter 的 Update 方法将执行最初配置 TableAdapter 时创建的语句,而不是使用“TableAdapter 查询配置向导”添加的某个附加查询。

当使用 TableAdapter 时,它实际执行与您通常要执行的命令相同的操作。例如,当调用适配器的 Fill 方法时,适配器将执行其 SelectCommand 属性中的数据命令并使用数据读取器(例如,SqlDataReader)将结果集加载到数据表中。与此类似,调用适配器的 Update 方法时,它为数据表中每条更改过的记录执行相应的命令(在 UpdateCommandInsertCommand 和 DeleteCommand 属性中)。

Note注意

如果主查询中有足够的信息,生成 TableAdapter 时将默认创建 InsertCommandUpdateCommand 和 DeleteCommand 命令。如果 TableAdapter 的主查询不只是一个表的 SELECT 语句,设计器可能无法生成 InsertCommandUpdateCommand 和 DeleteCommand。如果没有生成这些命令,执行 TableAdapter.Update 方法时可能会收到一个错误。

TableAdapter GenerateDbDirectMethods

除了 InsertCommandUpdateCommand 和 DeleteCommand 之外,创建 TableAdapter 时还生成了一些可以直接在数据库上执行的方法。可以直接调用这些方法(TableAdapter.InsertTableAdapter.Update 和 TableAdapter.Delete)对数据库中的数据进行操作。

如果不想创建这些直接方法,可将 TableAdapter 的“GenerateDbDirectMethods”属性设置为 false(在“属性”窗口中)。添加到 TableAdapter 的附加查询是独立的查询 -- 它们不生成这些方法。

TableAdapter 对可空类型的支持

TableAdapter 支持可为空的类型 Nullable(Of T) 和 T?。有关 Visual Basic 中的可空类型的更多信息,请参见可能没有已定义值的值类型。有关 C# 中的可空类型的更多信息,请参见使用可空类型(C# 编程指南)

请参见

分享到:
评论

相关推荐

    TableAdapter 概述.

    TableAdapter是Microsoft Visual Studio中的一个关键组件,主要应用于数据访问层,它在.NET框架的数据绑定和数据处理中扮演着至关重要的角色。TableAdapter的设计目的是为了简化数据库操作,它充当了一个桥梁,连接...

    全面剖析TableAdapter.

    在C#编程中,TableAdapter是一个非常重要的组件,它在.NET Framework的数据访问层扮演着关键角色,尤其是在使用Visual Studio开发数据库驱动的应用程序时。TableAdapter是Microsoft的ADO.NET框架的一部分,它提供了...

    在ASP.NET 2.0中操作数据:在TableAdapter里使用JOINs(源码)

    这篇教程将深入探讨如何在TableAdapter中使用JOINs来合并多个表的数据,从而提高查询效率并获取更复杂的信息。 首先,TableAdapter是一个自动生成的类,它封装了SQL查询、连接字符串和填充DataSet的方法。当你在...

    tableadapter的事务处理

    在.NET框架中,TableAdapter是DataSet的一个组成部分,用于与数据库进行交互,比如填充数据表、执行SQL命令等。然而,由于TableAdapter默认不支持显式事务管理,因此在需要进行多步骤操作且需要保证数据一致性时,...

    第七章2:TableAdapter组件访问数据库.ppt

    第七章2:TableAdapter组件访问数据库

    连接不上服务器解决办法

    "TableAdapter"是Microsoft Visual Studio中的一个组件,主要用于处理.NET Framework中的数据访问。它在ADO.NET架构中扮演着重要角色,帮助开发者从数据库检索、更新或操作数据。当TableAdapter无法连接到服务器时,...

    在ASP.NET 2.0中操作数据:在TableAdapters里创建新的存储过程(源码)

    3. **配置TableAdapter**:在Dataset Designer中,右键点击空白区域,选择“添加查询”来配置TableAdapter。在向导中,选择“使用SQL语句”或“使用存储过程”。 4. **创建存储过程**:如果你还没有在数据库中创建...

    在ASP.NET 2.0中操作数据:在TableAdapter里使用JOINs

    在ASP.NET 2.0中操作数据:在TableAdapter里使用JOINs

    C#客户端和中间层编程中的数据访问(2)

    #### 9.1 “填充数据集和查询数据”概述 在C#开发.NET数据库系统中,客户端与中间层编程中的数据访问是一个关键环节。这一章节主要介绍了如何将数据加载到应用程序中,特别是针对数据集的填充与SQL语句的执行。 在...

    在ASP.NET 2.0中操作数据之六十七:在TableAdapters中使用JOINs

    以下是步骤概述: 1. 在数据库中创建存储过程,该过程应包含JOIN查询以获取所需的数据。 2. 打开Dataset设计器,选择TableAdapter并右键单击以打开“配置”对话框。 3. 选择“使用现有存储过程”,找到刚刚创建的...

    C#中数据库的更新和删除记录的两种实现方式.pdf

    在示例代码中,通过FindBy方法找到对应的facultyRow和courseRow,然后调用updatefacultydata和updatecoursedata方法更新数据,最后调用TableAdapter的Update方法提交更改。这种方法可以灵活处理主键变化,因为你可以...

    Windows Mobile 开发黄金周(3):Using SQL MOBILE on.NET CF 2.0

    #### 一、概述 本篇文章将深入探讨如何在.NET Compact Framework 2.0(以下简称.NET CF 2.0)环境下利用SQL Mobile进行高效的数据管理。通过一系列实践案例,我们将了解.NET CF 2.0的数据访问模型、Visual Studio ...

    Access data in Visual Studio.pdf

    #### 概述 在Visual Studio 中开发的应用程序可以连接到几乎任何数据库产品或服务中的数据,无论这些数据位于本地机器、局域网还是公共云、私有云或混合云环境中。这使得Visual Studio 成为一个强大的平台,不仅适用...

    关于ADO.NET的讲解

    #### 一、概述 ADO.NET(ActiveX Data Objects .NET)是Microsoft为.NET框架设计的一组数据访问技术。它提供了一种断开连接的数据访问模式,适用于构建高性能的数据驱动应用程序。本篇文章将根据提供的参考资料,...

    控件代码C#通过修改datagridview控件来修改access数据

    #### 概述 本篇文章主要介绍了如何在C#应用程序中使用DataGridView控件与Microsoft Access数据库进行交互,实现数据显示及更新的功能。通过一个简单的示例程序,我们能够了解到如何加载Access数据库到DataGridView...

    vs2005数据集学习笔记.

    - 按照“TableAdapter配置向导”的提示操作,直到进入“输入SQL语句”步骤,输入查询语句(例如:“SELECT * FROM 表名”),点击“完成”。 **第五步:自定义TableAdapter** - 删除自动生成的字段(通常只有一个...

    VB.NET数据库基础教程之全面解析DataAdapter类

    VB.NET 数据库基础教程之全面解析 DataAdapter 类 DataAdapter 类是 VB.NET 中数据库开发中一个重要的组件,它扮演着数据库和程序之间的桥梁角色,能够执行 Command 对象,从数据库中检索数据,并将其填充到 ...

    在ASP.NET 2.0中操作数据:在TableAdapters里使用现有的存储过程(源码)

    6. **使用TableAdapter**:在ASP.NET 2.0页面的代码-behind中,实例化TableAdapter,然后调用生成的方法。例如: ```csharp using (var adapter = new YourDataSetTableAdapters.YourTableAdapter()) { var dataSet...

Global site tag (gtag.js) - Google Analytics