微软企业库4.1学习笔记(三十一)数据访问模块 简介

  Unity模块对我来说学习起来还是有一定的难度的,很多东西都是第一次学习,有些东西理解的不透侧,所以Unity后面的内容想要等自己继续理解一下,后面给大家补充回来吧,先开始后面的章节。大概看了一下Unity后面的内容,计划给它留下四篇blog的地方,所以数据访问模块从三十一开始,感谢大家的支持。

  下面我们回到正题。

  Data Access Appliction Block 简介

  企业库的数据访问模块实现了常用了数据访问功能,简化了这部分的开发工作。应用可以在各种情况下使用本模块,例如,从数据库读取数据用来显示、通过应用层传递数据、提交数据给数据库系统。模块支持存储过程和SQL语句,常用的housekeeping功能,例如,连接管理、创建、缓存参数,在模块中都封装了方法。换句话说,数据访问模块以简单的方式提供了ADO.NET中的常用功能,提高了开发的生产力。

  ADO.NET提供了例如DbCommand和DbConnection类,这些帮助开发者将数据提供程序从特殊的数据库实现中抽象出来。模块使用这些类,提供了一个模型,支持数据类型的特定功能,例如参数发现和类型转换。因为这些,应用可以在不修改客户端代码的情况下,从一种数据库换成另一种数据库。模块包含了一个抽象类,包含了常用的接口,提供了实现数据访问的大部分方法。

  模块也提供了一些指定数据库的操作类,例如SQL Server、Server CE和Oracle。这些类包含了对指定数据库的操作方法。对于只是为一种数据库而写的代码,例如SQL Server,看起来和为其他数据库,例如Oracle,而写的代码很相似。

  模块的另外一个功能是可以通过数据库连接字符串的名称操作指定的数据库。也可以将指定的名称作为参数传递给DatabaseFactory.CreateDatabase方法。每个指定名称的数据库在配置文件中都存储了连接信息。通过修改这些配置信息,开发者可以在不编译代码的情况下使得应用可以运行在不同的数据库之上。

  数据访问模块提供了下面的好处:

  •   如果想要使用ADO.NET2.0的功能,ADO.NET2.0可以和模块的数据访问功能一起使用。
  •   减少了实现标准功能所需要写的代码。
  •   帮助保持一致的数据访问体验,无论是在应用中,还是在企业的各种应用之间。
  •   减少了改变数据库带来的困难。
  •   减少不同数据库的不同模型在开发的过程中带来的学习曲线。
  •   减少了开发者在实现针对不同数据库所需编写的代码量。

  常用的解决方案

  开发者经常会写一些数据库访问的代码。因为它太常用了,开发者会发现在开发每个应用的时候都在编写重复的代码。另外,这些应用可能需要工作在不同的数据库系统之上。尽管这些功能相似,代码要适应不同数据库的编程模型。数据访问模块通过提供通用的方法来解决这些问题,开发者只需要做下面的工作:

  •   创建database对象
  •   如果需要的话,为command提供参数
  •   调用适当的方法,这些方法都是经过优化的,而且他们都是轻便的。

  数据库访问模块可以操作SQL Server、SQL Server CE、和Oracle数据库。设计的目的就是解决开发者在面对数据库操作的时候的常见任务。下面列出了常用的数据访问场景:

  •   使用DataReader获取多行数据
  •   使用DataSet获取多行数据
  •   执行一个命令,获取output参数的值
  •   执行一个命令,获取单个的项目的值
  •   使用事务完成多个操作
  •   从Sql Server中获取XML数据
  •   使用DataSet中的值更新数据库

  示例代码

  下面的代码示例了使用存储过程,返回DataSet

  

Database db = DatabaseFactory.CreateDatabase(); 
DbCommand dbCommand = db.GetStoredProcCommand("GetProductsByCategory");  
//Retrieve products from category 7. 
db.AddInParameter(dbCommand, "CategoryID", DbType.Int32, 7); 
DataSet productDataSet = db.ExecuteDataSet(dbCommand);

  

  什么时候使用数据访问模块

  模块包含了大量的方法,可以简化数据库访问的常用任务。每一个方法都封装了访问数据所需的逻辑和数据库连接管理,如果你的应用使用标准的数据访问方法,可以考虑使用数据访问模块。

  模块支持在不同的数据库下使用相同的代码,这些类支持SQL Server和Oracle。这些代码中也包括了针对数据库的特殊实现,包括参数处理和游标处理。另外,GenericDatabase类允许在应用中使用任何配置好的ADO.NET DbProviderFactory对象。你可以通过添加一个新的数据库类型来扩展模块,里面包含数据库的特殊功能,或者是针对现有数据提供一个自定义的实现。唯一的条件就是在目标数据库中存在一个ADO.NET DbProviderFactory类。

  什么时候直接使用ADO.NET访问数据库

  数据访问模块是对ADO.NET的一个补充,不是代替ADO.NET的。模块给开发者使用ADO.NET的时候提供了一个最佳实践。如果你的应用需要以特殊的方式获取数据,如果你的代码需要针对特殊数据库有自定义的操作,也许直接使用ADO.NET更适合于你。

原文地址:https://www.cnblogs.com/DoNetCShap/p/2295510.html