EntLib 3.1学习笔记(2) : Data Access Application Block

简化实现通用数据访问功能的开发任务。应用程序可以在很多情况下使用应用程序块,例如读取显示数据、获得通过应用程序层的数据,以及将更改过的数据提交回数据库系统等。应用程序块包括对存储过程和内嵌 SQL 以及常见内务处理任务(例如,管理连接、创建与缓存封装在应用程序块的方法中的参数)的支持。换句话说,数据访问应用程序块提供对最常用的 ADO.NET 功能的访问。

1. 解决的问题:
(1) 它可以减少编写样本代码以执行标准任务的需要。 
(2) 它有助于在应用程序和整个企业中维护一致的数据访问做法。 
(3) 它可以降低更改物理数据库目标的难度。
(4) 它使开发人员免于学习不同类型数据库的不同编程模型。 
(5) 将应用程序移植到不同类型的数据库时,它可以减少需要重新编写的代码数量。

2. 使用:
(1) 使用Enterprise Library Configuration打开应用程序配置文件。
(2) 添加引用:Microsoft.Practices.EnterpriseLibrary.Data.dll
    using Microsoft.Practices.EnterpriseLibrary.Data;
(3) 创建数据库连接操作类:

   Database db = DatabaseFactory.CreateDatabase("NorthWind");

(4) 执行SQL语句:

    DataSet ds = db.ExecuteDataSet(CommandType.Text,commandText);
    DataReader dr = db.ExecuteReader(CommandType.Text,commandText); 用完后记得要dr.Close();
    object result = db.ExecuteScalar(CommandType.Text,commandText);
    //或者
    DbCommand dbCommand = db.GetSqlStringCommand(commandText);
    object result = db.Execute*(dbCommand);

(5) 执行存储过程:

    DbCommand dbCommand = db.GetStoredProcCommand(storeProcName);
    db.AddInParameter(dbCommand, "inParam", DbType.Int32, Category);//注意这里和下面不用加@,DAAB会自动加。
    db.AddOutParameter(dbCommand, "outParam", DbType.Int32, Category);
    object result = db.Execute*(dbCommand);
    object outValue = db.GetParameterValue(dbCommand, "outParam");

(6) 更新DataSet:

    DbCommand insertCommand = db.GetStoredProcCommand("AddCommand");//可以再添加处理参数,下同
    DbCommand deleteCommand = db.GetStoredProcCommand("DeleteCommand");
    DbCommand updateCommand = db.GetStoredProcCommand("UpdateCommand");
    int rowsAffected = db.UpdateDataSet(dataSet, "tableName", insertCommand, updateCommand,
 deleteCommand, UpdateBehavior.Standard);

(7) 处理事务:

public bool Transfer(int transactionAmount, int sourceAccount, int destinationAccount)
{
     bool result = false;
     Database db = DatabaseFactory.CreateDatabase();

     string sqlCommand = "Command1";
     DbCommand creditCommand = db.GetStoredProcCommand(sqlCommand);

     sqlCommand = "Comand2";
     DbCommand debitCommand = db.GetStoredProcCommand(sqlCommand);

     using (DbConnection connection = db.CreateConnection())
     {
          connection.Open();
          DbTransaction transaction = connection.BeginTransaction();
          try
          {
               db.ExecuteNonQuery(creditCommand, transaction);
               db.ExecuteNonQuery(debitCommand, transaction);
               transaction.Commit();
               result = true;
          }
          catch
          {
               transaction.Rollback();
          }
          connection.Close();                
          return result;
     }
}

3. Data Access Application Block 的设计:

4. 暂时还没有搞明白的地方:

DbCommand dbCommand = db.GetStoredProcCommand(commandTest/storeProcName, productID);
object value = db.ExecuteScalar(dbCommand);

Passing the productID value to the commandTest/storeProcName results in parameter discovery being used to correctly establish the parameter information for the productID. Subsequent calls to this method will cause the block to retrieve the parameter information from the cache, and not require rediscovery。
http://davidhayden.com/blog/dave/archive/2006/11/03/CachingStoredProcedureParameters.aspx
http://davidhayden.com/blog/dave/archive/2006/11/01/SqlCommandBuilderDeriveParameters.aspx
貌似是在说对参数进行缓存什么的,但不知道究竟有啥用?真的能提高性能?-_-


转载于:https://www.cnblogs.com/China-Dragon/archive/2009/03/08/1406299.html

EntLib 3.1学习笔记(2) : Data Access Application Block相关推荐

  1. EntLib 3.1学习笔记(5) : Exception Handling Application Block

    [en] http://msdn2.microsoft.com/en-us/library/aa480461.aspx [ch] http://www.microsoft.com/china/MSDN ...

  2. [翻译]The Data Access Application Block

    Enterprise Library 4.1 - October 2008 The Data Access Application Block 数据访问应用块 The Enterprise Libra ...

  3. 感觉 Data Access Application Block(DAAB) 里也有可能写得不太好的地方

    昨天下载了博客园的代码,里面有一个 Data\SqlServer.cs 我不清楚是不是 MS DAAB 里的原样文件.不过前面有声明如下: // =========================== ...

  4. 开发自己的Data Access Application Block[下篇]

    上接:[原创] 我的ORM: 开发自己的Data Access Application Block - Part I 4. Database 下面来介绍重中之重:Database,绝大部分的Data  ...

  5. Enterprise Library: Data Access Application Block配置文件分析篇

    Enterprise Library: Data Access Application Block配置文件分析篇 Enterprise Library提供了Configuration Console配 ...

  6. Enterprise Library v5.0 -- Data Access Application Block 开发向导(3)

    微软企业库 Enterprise Library 5.0 正式发布!!! Enterprise Library 5.0 开发向导- 简介(1) Enterprise Library v5.0 -- D ...

  7. Microsoft Enterprise Library 5.0 系列(五) Data Access Application Block

    企业库数据库访问模块通过抽象工厂模式,允许用户通过简单的配置选择不同的数据库作为程序的数据源,大大解决了切换数据库时带来的麻烦.因为我本机只安装了SQL Server 2005,所以在此只做SQL的演 ...

  8. HALCON 20.11:深度学习笔记(3)---Data(数据)

    HALCON 20.11:深度学习笔记(3)---Data(数据) HALCON 20.11.0.0中,实现了深度学习方法.其中,关于术语"数据"的介绍如下: 术语"数据 ...

  9. EntLib 3.1学习笔记(6) : Security Application Block

    http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/dnpag2entlib.mspx?mfr= ...

最新文章

  1. 一般家用监控多少钱_家用煤气灶价格一般是多少 燃气灶安装的流程
  2. css撑起父元素清除浮动的问题
  3. 图像处理——基于OpenCV的canny边缘检测
  4. 神经网络测试时间计算机,卷积神经网络的时代到此结束了?
  5. C++ 读入优化与输出优化 模板
  6. git图文工具_全网最详细的Windows里Git client客户端管理工具SourceTree的下载与安装(图文详解)...
  7. 手写自己的MyBatis框架-Executor
  8. ajax应用_AJAX的应用
  9. 信息学奥赛一本通(1110:查找特定的值)
  10. 杰富瑞主管:若BTC回落,将增加养老基金投资组合中的加密货币成分
  11. 几款主流好用的markdown编辑器介绍
  12. 达梦数据库DCA培训总结
  13. java ITEXT实现PDF生成二维码和条形码
  14. 宾得的宾干微距镜头DA35mm
  15. python协同过滤电影推荐_推荐系统:基于用户和模型的协同过滤电影推荐
  16. Stm8 串口重定向及问题解决
  17. 宇视科技的摄像头添加至别的品牌录像机黑屏
  18. 如何开张美国银行卡CitiBank
  19. inconsistent datatypes: expected DATE got NUMBER
  20. HTTP 错误 404.3 - Not Found由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射

热门文章

  1. docker学习笔记18:Dockerfile 指令 VOLUME 介绍
  2. Server.MapPath()
  3. 常用T-Code总结
  4. 第1章 ASP.NET 3.5与开发工具
  5. 字符串中的第一个唯一字符
  6. php软件开发--redis操作
  7. web前端之js快速入门(ECMAscript)
  8. raft算法mysql主从复制_mysql主从复制原理
  9. 团队的远程管理_不管理远程团队的7种方法
  10. alan turing_深入探讨Alan Turing的生活和遗产:5本及更多书籍