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
貌似是在说对参数进行缓存什么的,但不知道究竟有啥用?真的能提高性能?-_-


本文转自Silent Void博客园博客,原文链接:http://www.cnblogs.com/happyhippy/archive/2007/08/08/848294.html,如需转载请自行联系原作者

相关文章
|
自然语言处理 编译器 Linux
编程基础之初识C语言
编程基础之初识C语言
118 0
|
存储 JavaScript 前端开发
JavaScript高级主题:JavaScript 中的 Map 和 Set 是什么?它们有什么区别?
JavaScript的ES6引入了Map和Set数据结构。Map用于存储键值对,适合通过键进行查找,而Set则存储唯一值,无键且不支持键查找。两者在性能上表现出色,尤其在频繁的写入删除操作中。选择使用哪个取决于具体应用场景:键值对需求选Map,独特值集合则选Set。
155 2
|
人工智能 C++ 编译器
C++编译器到底能帮我们把代码优化到什么程度?
TODO: 用while写法的程序会不会循环展开? 本文地址:http://blog.csdn.net/hengyunabc/article/details/7170865 一个简单的累加求和程序: TYPE S=0; for(int i = 0;i < SIZE; i++) { S += a[i]; } 很多人都觉得这个程序写得不好,编译器不能生成很好的汇编代码。
871 0
|
6天前
|
人工智能 运维 安全
|
4天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
540 14
|
11天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
898 109
|
5天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。