《电子技术应用》
您所在的位置:首页 > 其他 > 设计应用 > 基于.NET的数据访问策略研究与实现
基于.NET的数据访问策略研究与实现
毛 莉1, 刘广强2
摘要: 基于.NET构架的四种数据访问策略,以及这些策略对连接数据源的要求和数据库读取方式的内部运行机制。
关键词: 数据库 数据访问 .NET
Abstract:
Key words :

  摘  要: 基于.NET构架的四种数据访问策略,以及这些策略对连接数据源的要求和数据库读取方式的内部运行机制。
  关键词: 数据提供程序  .NET  Data Access

   .NET提供了编写分布式应用程序的模型,此模型简单明了,功能强大。ADO.NET是.NET中对数据存取问题的解决方案。.NET定义了二种数据提供程序(SQL Server.NET和OLE DB.NET)来连接数据源,提供了DataReader和DataSet二种方法读取数据库中的数据。本文结合具体实例介绍使用不同的策略访问数据库的方法,并归纳总结了各种数据库访问策略适用于何种系统环境。
1  .NET数据提供程序和数据读取方式简介
1.1 .NET数据提供程序

  .NET数据提供程序是为连接到特定数据源而优化的专门类集,它通过继承System Data中的IdbAdapter接口来构建。目前的.NET SDK版本中,Microsoft提供了二个数据提供程序。如图1所示:①SQL Server.NET数据提供程序用于连接到Microsoft  SQL  Server 7.0和更高级版本上。②OLE DB.NET数据提供程序是常规的数据提供程序,用于连接到任何经过传统OLE  DB提供程序访问的任何其他数据源。

 


1.2 数据读取方式
  ADO.NET提供DataSet和DataReader二种不同的方式读取数据库中的数据。DataReader提供只向前的读取方法,通过执行命令在数据源生成结果集。一次只能使用单个结果集,如果要同时使用一个以上的结果集,就需要有多个活动的DataReader;DataSet是一个内存数据库,它能保存几个表,可以使某个内部表与其他内部表相关联,还可以管理对数据的约束条件并暂存数据。
1.3 访问数据库策略
  在访问数据源时,首先需要连接数据库,然后将数据库中的数据读取到内存中,再对数据进行操作。这样就存在四种访问数据库策略,如表1所示。

 


2  基于不同策略访问数据源的示例
2.1 在SQL Server中使用DataSet

  本例将查询SQL Server数据库。首先将数据存储到DataSet中,然后显示这些数据。假设服务器名为HPDB,将SQL Server数据库实例名定义为TEST,用户名为SA,密码为空,关系名为EmpList。数据结构如表2所示。


  该操作步骤如下:
  (1)使用SQL Server7.0数据库的SqlConnection连接数据库。
  (2)创建一个DataSet对象。
  (3)使用SqlDataAdapter对象的Fill( )方法,将数据库中的数据加载到DataSet中。
  (4)利用DataSet对象的Tables方法指定DataTables集合的锚点。
  (5)利用Foreach的嵌套操作显示EmpList表中的数据。
  以下为该示例程序的完整代码:
  

  

  运行结果如表3所示。


2.2 在OLE DB数据源中使用DataReader
  OLE DB数据源是指具有OLE DB驱动程序的任何数据源,其中包括Access、Oracle、DB2、SQL Server6.0版本或更早期版本。本例是连接到Microsoft Access 7.0数据源,关系名为EmpList,数据结构如表2。
  操作步骤如下:
  (1)使用Microsoft Access数据库的OLE DB 连接数据库。
  (2)通过将SQL SELECT 语句和OleDbConnection对象作为参数传递到重载构造函数来创建OleDbCommand对象。
  (3)调用OleDbCommand对象的ExecuteReader( )方法并存储返回的OleDbDataReader对象。
  (4)调用OleDbDataReader对象的Read( )方法,在屏幕上打印结果,直到返回false为止。
  (5)如果出现异常,发出消息。
  该示例的代码如下:
  

  

  运行结果同表3。
3  比  较
3.1 比较二种不同的数据连接方式
  ADO.NET提供了一组功能强大的类,用于连接到数据库、执行SQL语句和调用存储过程。使用SqlConnection类就可以连接到SQL  Server 7.0和更高级版本,而使用OleDbConnection类可以连接到SQL Server数据库6.0版本或更早期版本以及其他OLE DB数据源。连接到数据库必须使用恰当的.NET数据提供程序。
  由于.NET数据提供程序具有与SQL  Server进行信息交流的能力,所以访问数据速度相当快。但是并非每个用户都使用SQL Server。所以OLE DB保留了仍然受到广泛支持的访问数据标准。事实上,在开发更多被优化用于特定数据库的数据提供程序之前,OLE DB类只是权宜之计。无论是从数据连接、数据提取、数据更新方面,SQL Server.NET提供程序的执行效率比OLE DB.NET提供程序都具有明显优势。
3.2 比较二种不同的数据库读取方式
  使用DataReader可以处理连接数据,一次只载入一行数据,这样能提高应用程序的总性能并降低系统开销。虽然DataReader运行速度很快,但是其功能非常有限。DataReader提供的数据不能被修改,DataReader的标准上没有引用以前提供数据元素的方法,DataReader需要数据库持久的、活动的连接。
  DataSet是ADO.NET中的主类,因为它允许表示客户端上的多个表、关系和约束条件,甚至可以将整个数据库保存在客户端,能将对数据库的修改推回到数据存储器中。DataSet能有效地为从数据源中读取的数据提供内存高速缓存。与DataReader不同,它会读取并将整个数据立即保存到内存中。一旦填充完数据,DataSet就会完全从其原始数据源断开。
  与其他任何工具一样,DataReader和DataSet也都适合于某些特定的应用。例如,DataReader适用于快速获取绑定到只读空间的大量数据,而DataSet则更适用于编辑合并来自多个数据源的数据。
4  总  结
  使用ADO.NET访问数据时,如果数据源是SQL  Server7.0或更高级版本,则建议采用SqlConnection类进行数据库连接;如果数据源是SQL Server数据库6.0版本或更早期版本以及其他DBMS,则只能使用OleDbConnection类;如果只是在Web窗体中简单显示数据,则将几十行的数据“推入”DataSet是没有意义的,建议使用DataReader。同理,使用DataReader填充编辑时保存数据的集合,然后编写已修改数据填充回数据源的方法非常低效,这时建议使用DataSet。
参考文献
1   Ferracchiati F C,Glynn J. .NET数据服务C#高级编程.北京:清华大学出版社,2001
2   金灿. .NET框架中三种数据访问技术及效率比较.计算机应用研究,2003;(4)
3   Dickinson P. ADO.NET高级编程.北京:中国电力出版社,2003
 

此内容为AET网站原创,未经授权禁止转载。