正 文

Visual Studio 2005中的新DataSet特性


www.7dspace.com  更新日期:2006-2-22 19:24:07  七度空间


  本文,我将致力于在 Microsoft Visual Studio 2005 开发环境下使用这些类以及派生的类进行开发工作。对于类型化 DataSet 所作的更改和由 Visual Studio 2005 生成的新类型化 TableAdapter,是本文将要讨论的具体内容。除此之外,为开发以数据为中心的应用程序而使用的设计器和工具也是本文要讨论的内容,这些设计器和工具提供了很高的灵活性和工作效率。为了解释不同的概念和特性,我将逐步介绍开发人员在实现应用程序数据处理部分时通常要经历的过程。代码示例使用 Northwind 数据库,该数据库是 Microsoft SQL Server(以及 MSDE)7.0 版本和 Microsoft SQL Server 2000 自带的示例数据库。

  Visual Studio 2005 引入了项目数据源的概念。数据源代表在应用程序中可以使用的数据。数据库不是这些数据的唯一来源,定义数据源所使用的 Data Source Configuration Wizard 允许您从三种不同的源获取数据:

1.数据库 — 既可以是基于服务器的数据库(例如 SQL Server 或 Oracle),也可以是基于文件的数据库(例如 Access 或 SQL Server Express)。Visual Studio 自动生成类型化 DataSet 及其他类,并将它们添加到项目。

2.对象 — 任何具有公共属性的对象都可以是数据源。不一定非要实现某个特殊接口。

3.Web 服务 — 从 Web 服务创建的数据源,将创建与 Web 服务返回的数据类型相对应的对象。

  数据源具有事半功倍的作用。一方面,它可以使指定、设计和生成代表应用程序数据的强类型类更容易。另一方面,它提供一种灵活而统一的机制,可非常快速地构建功能丰富、运行高效的 WinForm 和 WebForms 用户界面。在阅读本文的过程中,您将了解到这是多么得快速、简单和灵活。

  数据库 (DataSet) 数据源的创建及其在 WinForms 应用程序中的使用是本文的重点内容。但是,以下两点也不容忽视:

一旦创建了数据源,就将以相同的方式使用每个数据源,而无需考虑其数据来自何处。也就是说,就像您可以轻松地将基于 Database 的数据源(以图形方式)绑定到网格控件或一组控件上一样,真正来自 Web 服务或您自定义业务对象的数据也要绑定到控件上。

无论是在 WinForms 还是在 WebForms 应用程序中使用,数据源均以同一种方式进行定义。不同的数据提供程序也进行了抽象,以便在只使用 DataSets 和 TableAdapters 公开数据访问的情况下,只需更改连接字符串并重新生成类就可以更改实际使用的数据库。

  类型化 DataSet 和 TableAdapter

  数据库数据源就是一个强类型 DataSet 与一个或多个强类型 DataTables 和 TableAdapters 对的组合。类型化 DataSet 的概念并不陌生,在 Visual Studio 2002/2003 中就已经提出。虽然它是从 .NET Framework 的一般 DataSet 类派生的生成类,但它具有定义好的架构以及特定于该架构的属性和方法。与此同时,DataSet 中的每个表还要生成其他三个特定于该 DataSet 的派生类 — DataTable、DataRow 和 DataRowChangeEvent 类。在这些类中,每个类都有针对相关表的特定架构、属性和方法。例如,如果根据 Northwind Employees 表定义一个数据源,最终将生成以下类:

NorthwindDataSet

EmployeesDataTable

EmployeesDataRow

EmployeesRowChangeEvent

  这四个类就组成了一个类型化 DataSet。在 Visual Studio 2005 中还将生成第五个类,名为 EmployeesTableAdapter 的类型化 TableAdapter,稍后我们将讨论这个类。当然,如果您以动态方式定义查询,那么就不能生成类型化 DataSet,而是需要使用标准的 DataSet。

  为什么要为类型化DataSet 而烦恼呢?因为除了促使您预先考虑数据的架构,而非仓促决定之外,类型化 DataSet 还提供了一些实际的优点:

1.DataSets、DataTables、DataRows 和 RowChangeEvent 都特定于正在处理的架构。

2.表、列和关系是以命名的属性方式公开的,而非一般的集合元素。

3.由于 (2) 的原因,Visual Studio 代码编辑器将支持完整的智能感知和语句结束支持。

4.可以实现编译时类型检查,例如在编译时而不是等到运行时就可以捕捉到字段名拼写错误,这同样是由于 (2) 的原因。

5.代码更简洁,可读性更强。例如以下代码行:

country = dsNorthwind.Tables ("Employees").Rows (row) ("Country")

可以替换为

country = dsNorthwind.Employees (row).Country

  总而言之,类型化 DataSets 所提供的设计时和编译时支持不但可以大大地减少启动开发时间,而且可以减少调试和稳定应用程序所需的时间。

  此外,TableAdapter 是 Visual Studio 2005 新提出的概念。它意味着强类型 TableAdapter 就是标准 DataAdapter 的强类型等价类。您可以使用 TableAdapter 连接到数据库,执行对数据库的查询或存储过程,并将数据填写到相关的 DataTable。每个 DataTable-TableAdapter 对都以一个 TableAdapter 指代。

  TableAdapter 实质上就是一个标准的 DataAdapter 的外部包装程序,它提供以下一些好处:

同一个 TableAdapter 类可在多个窗体或组件上使用,因此任何对查询/命令进行的更改都将自动在所有实例中反映出来。这不同于现有情形,在现有情形下,每个访问数据库的组件都必须拥有各自单独配置的 DataAdapter。但是如果要确保 DataTables 和 DataAdapters 保持同步,这样做将更容易。

如果要为某个指定的 DataTable 定义多个查询/命令,使用一个 TableAdapter 即可轻松完成,而不必使用多个 DataAdapters 或手动切换代码。

Fill 命令的名字可读性强、较友好,而且 TableAdapter 包含的代码可以自动为这些命令方法中的所有参数填加类型和值信息。您再也不需要将其以特定于提供程序的数据类型(例如 SqlInt)进行传递了。

  举一个简单的代码片断示例会有助于解释这些特性。在 Visual Studio 2002/2003 中,即使使用了类型化 DataSet,执行一个带有两个参数的简单查询也需要不少的代码。对于下列查询

SELECT FirstName, LastName from Employees WHERE Country = @country AND City = @city

  我们必须按以下方式编写代码:

Me.SqlAdapter1.SelectCommand.Parameters ("@country").value =
Me.CountryListbox.SelectedValue.Trim()
Me.SqlAdapter1.SelectCommand.Parameters ("@city").value =
Me.CityTextbox.Text.Trim()
Me.SqlAdapter1.Fill (Me.NorthwindDataSet.Employees)

  毫无疑问,随着参数数量的增长,代码行数也将不断增加。但更重要的是,正确地记忆和输入所有参数名的机率却大大降低了。即使准确记住了参数名,也仍然需要记住参数的数据类型。这还不是最糟糕的情况,如果错误地输入了字段名或者为值赋了错误的类型,那么很可能到运行时才会察觉。

  如果使用 Visual Studio 2005 中的 TableAdapter,一旦定义了命令 FillByCountryAndCity,在任何地方使用它时只需编写一行代码,将其以参数值形式传递即可:

Me.EmployeesTableAdapter.FillByCountryAndCity ( _
   Me.NorthwindDataSet.Employees, Me.CountryListbox.SelectedValue.Trim(),
      _    Me.CityTextbox.Text.Trim() )

  不容忽视的是,我们不仅可以从一个 TableAdapter 那里取得多个命名命令,而且这些命令都是强类型的。这就意味着在 Visual Studio 中编写代码时,可以将这些命令视为 TableAdapter 的方法,因为我们获得了完整的智能感知。我们还要对这些命令的参数进行编译时类型检查,同时,方法和参数类型定义的工具提示也可以助我们一臂之力。 TableAdapter 可以包含多个执行不同命令、接收不同参数的方法。现在我们要构建示例窗体,稍后再详细介绍 TableAdapter。

5页,页码:[1] [2] [3] [4] [5] 

上一篇:一种细腻的导航效果的制作方法
下一篇:站长必读:网站推广之十不可以
Visual Studio 2005中的新DataSet特性 作者:Jackie Goldstein 来源:MSDN
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐