VS2005数据存取层深入剖析之高级篇

http://www.sina.com.cn 2006年11月20日 09:11  天极yesky

  作者:朱先忠编译

  一、 扩展表格适配器

  当你设计业务层和数据存取层时,你基本上都是把实体和关系分别映射到数据库表格及表格列中。典型地,我们期望每个实体的行为是:通过一系列语句来执行数据库操作。那么,你该如何描述一个实体的行为呢?数据存取设计模式在这方面提供了一定的指导作用。其实,一个表格适配器的CommandCollection属性是一个内部数据结构,它提供的语句用于硬编码在一个表格上期望的行为。

  因此,如果你想在Customers表格上添加一种行为,那么,你需要把一个新的T-SQL语句添加到CommandCollection属性,然后经由CustomersTableAdapter类中的一个新的方法使其成为public型属性。Visual Studio 2005提供一个简单的向导来完成所有这些工作。只要简单地选择在表格适配器设计器中定义的一个任务,你就可以触发这个向导,如图4所示。

VS2005数据存取层深入剖析之高级篇
图4.选择表格适配器设计器定义的一个任务触发特定的向导。

  当你在Visual Studio 2005中选择一个表格适配器组件时,它将显示一个灵敏标签。点击它之后,Visual Studio就会显示一个菜单。如果你选择编辑查询,那么,你会得到当前数据集组件中所有表格的一个图形表示(见图5)。

VS2005数据存取层深入剖析之高级篇
图5.Visual Studio 2005数据设计器提供的表格关系和表格适配器。

  要编辑一个现有查询,你只要选择表格适配器任务列表中的任务并编辑Properties窗口中的属性即可。为了添加一个新任务,你可以选择“Add Query”,然后遵循随后向导的提示即可。该向导最终引导你定义一个新的命令,无论它是一个查询或是一个更新语句。完成之后,你会看到一个额外的入口出现在任务列表内;另外,对基本代码也进行了一定程度的修改。

  现在,假定你定义了一个新的查询语句—用于根据不同国家加载相应的顾客信息,那么,最后的语句看起来类似如下:

SELECT ... FROM customers WHERE country=@country

  向导会要求你为使用该语句检索数据(GetDataXXX)并填充传递的数据表格(FillXXX)的两个方法进行命名。当然,你可以选择仅生成其中一个方法。

  让我们如图6所示来命名方法GetDataByCountry和FillByCountry。

VS2005数据存取层深入剖析之高级篇
图6.添加到表格适配器的新任务。

  这两个新的方法都要使用从命令集合中提取的命令来建立适配器的SelectCommand语句并执行它。列表4展示了该FillByCountry方法的源代码。

  列表4.FillByCountry方法的源代码。

The new FillByCountry method
Public Overridable Overloads Function FillByCountry( _
ByVal dataTable As CustomersDataTable, _
ByVal country As String) As Integer
 Me.Adapter.SelectCommand = Me.CommandCollection(1)
 If (country Is Nothing) Then
  Me.Adapter.SelectCommand.Parameters(0).Value = System.DBNull.Value
 Else
  Me.Adapter.SelectCommand.Parameters(0).Value = CType(country, String)
 End If
 If (Me.ClearBeforeFill = True) Then
  dataTable.Clear()
 End If
 Dim returnValue As Integer = Me.Adapter.Fill(dataTable)
 Return returnValue
End Function

上一页 1 2 3 4 下一页
本文导航:
·扩展表格适配器
·生成代码评价
·应用数据映射模式
·应用表格数据网关模式

发表评论 _COUNT_条
Powered By Google
不支持Flash
·城市对话改革30年 ·新浪城市同心联动 ·诚招合作伙伴 ·企业邮箱畅通无阻
不支持Flash