科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件VS2005数据存取层深入剖析之基础篇

VS2005数据存取层深入剖析之基础篇

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文试图对Visual Studio 2005自动生成的数据存取层(DAL)作深入分析,最终达到在此基础上进一步编辑和扩展此代码之目的。

作者:朱先忠编译 来源:天极开发 2007年11月3日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
五. 表格适配器(TableAdapter)

  一个表格适配器为一个应用程序与它的数据库之间的通信提供支持。例如,一个表格适配器连接到一个数据库并且执行命令;任何返回的数据被存储到一个DataTable对象中以备进一步处理。你还能够使用一个表格适配器来把更新内容发送回数据库。其实,一个表格适配器是一个工具生成的类的实例。一个表格适配器只是在.NET托管的提供程序内定义的适配器类的一个特例。简言之,它是一个担当针对特定表格的适配器的包装器对象。注意,表格适配器没有基类。

  下面的代码片断展示了一个表格适配器类典型的定义形式。

Partial Public Class CustomersTableAdapter
Inherits System.ComponentModel.Component
 ...
End Class

  从内部实现来看,一个表格适配器类合并了一个SqlCommand,SqlConnection和SqlDataAdapter对象的功能。在Visual Basic.NET中,数据适配器使用了WithEvents修饰词以便捕获事件。表格2列举了一个表格适配器的内部属性。

  表格2.一个表格适配器类的内部成员。

成员 修饰词 描述
Adapter Private ReadOnly 用于与相应的数据库表格进行通讯的数据适配器。
Connection Friend 用于与相应的数据库表格进行通讯的连接对象。
CommandCollection Protected ReadOnly 定义了一组描述表格适配器行为的命令对象。为了增强可以通过表格适配器实现的任务,你可以把一个新的命令添加到这个集合。
ClearBeforeFill Public 指示是否表格在填充之前应该为空。默认情况下为True。

  内部数据适配器是在InitAdapter方法中初始化的。该方法是从Adapter属性的get存取器内进行调用的。

Private ReadOnly Property Adapter() _
As System.Data.SqlClient.SqlDataAdapter
Get
 If (Me._adapter Is Nothing) Then
  Me.InitAdapter
 End If
 Return Me._adapter
End Get
End Property

  在此,适配器是一个助理对象,用于驱动在底层表格上的标准的CRUD(创建,读取,更新,删除)操作。这个适配器负责定义相应于Insert,Delete和Update命令的缺省T-SQL语句;它并没有包括一个Select命令。由于主要是为了便于使用数据填充数据表格,所以,适配器通过在表格适配器中的一对public类型方法(分别为Fill和GetData)实现了它的Select功能。

  任何数据操作都要求建立到数据源的一个物理连接。相应源码中的列表1展示了Connection属性的内部实现。这个Connection字符串存储在应用程序的配置文件内,可以在任何时候预以编辑而无需修改和重新编译基本代码。当你建立一个新的连接时,该信息被自动地传递到表格适配器中所有的命令对象。

  后面你会看到,表格适配器类是用于实现数据存取的流行设计模式中的非常重要的元素之一。借助于CommandCollection属性,表格适配器类能够列出在表格上执行的所有行为。简言之,它定义了表格的“行为”。

Protected ReadOnly Property CommandCollection() _
As System.Data.SqlClient.SqlCommand()
Get
 If (Me._commandCollection Is Nothing) Then
  Me.InitCommandCollection
 End If
 Return Me._commandCollection
End Get
End Property

  默认情况下,该CommandCollection仅包含一个命令—实现Select操作的T-SQL命令。下列代码展示了对这个集合的初始化。

Private Sub InitCommandCollection()
 _commandCollection = New SqlCommand(0) {}
 _commandCollection(0) = New SqlCommand
 _commandCollection(0).Connection = Me.Connection
 _commandCollection(0).CommandText = "SELECT * FROM Customers"
 _commandCollection(0).CommandType = CommandType.Text
End Sub

  这个集合内的缺省命令对象被包装在Fill和GetData方法内(见源码中的列表2);其中,Fill负责使用命令结果填充数据表格,而GetData能够使用相同的数据返回一个新的DataTable对象。表格3列出了该表格适配器类的所有public方法。

  表格3.一个表格适配器类提供的方法。

方法
描述
Fill 使用执行命令集合中的缺省命令所返回的结果来填充与这个表格适配器相关联的数据表格。
GetData 返回一个新创建的DataTable对象;其中填充有执行命令集合中的缺省命令取得的数据。
Delete 执行与内部数据适配器相关联的DELETE命令。
Insert 执行与内部数据适配器相关联的INSERT命令。
Update 执行与内部数据适配器相关联的UPDATE命令。这个方法提供若干重载形式。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章