天天看点

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) 创建数据库连接操作类:

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

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

(4) 执行SQL语句:

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

    DataSet ds = db.ExecuteDataSet(CommandType.Text,commandText);

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

    DataReader dr = db.ExecuteReader(CommandType.Text,commandText); 用完后记得要dr.Close();

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

    object result = db.ExecuteScalar(CommandType.Text,commandText);

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

    //或者

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

    DbCommand dbCommand = db.GetSqlStringCommand(commandText);

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

    object result = db.Execute*(dbCommand);

(5) 执行存储过程:

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

    DbCommand dbCommand = db.GetStoredProcCommand(storeProcName);

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

    db.AddInParameter(dbCommand, "inParam", DbType.Int32, Category);//注意这里和下面不用加@,DAAB会自动加。

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

    db.AddOutParameter(dbCommand, "outParam", DbType.Int32, Category);

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

    object outValue = db.GetParameterValue(dbCommand, "outParam");

(6) 更新DataSet:

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

    DbCommand insertCommand = db.GetStoredProcCommand("AddCommand");//可以再添加处理参数,下同

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

    DbCommand deleteCommand = db.GetStoredProcCommand("DeleteCommand");

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

    DbCommand updateCommand = db.GetStoredProcCommand("UpdateCommand");

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

    int rowsAffected = db.UpdateDataSet(dataSet, "tableName", insertCommand, updateCommand,

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

 deleteCommand, UpdateBehavior.Standard);

(7) 处理事务:

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

public bool Transfer(int transactionAmount, int sourceAccount, int destinationAccount)

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

{

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

     bool result = false;

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

     Database db = DatabaseFactory.CreateDatabase();

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

     string sqlCommand = "Command1";

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

     DbCommand creditCommand = db.GetStoredProcCommand(sqlCommand);

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

     sqlCommand = "Comand2";

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

     DbCommand debitCommand = db.GetStoredProcCommand(sqlCommand);

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

     using (DbConnection connection = db.CreateConnection())

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

     {

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

          connection.Open();

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

          DbTransaction transaction = connection.BeginTransaction();

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

          try

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

          {

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

               db.ExecuteNonQuery(creditCommand, transaction);

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

               db.ExecuteNonQuery(debitCommand, transaction);

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

               transaction.Commit();

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

               result = true;

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

          }

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

          catch

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

               transaction.Rollback();

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

          connection.Close();                

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

          return result;

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

     }

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

}

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

3. Data Access Application Block 的设计:

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

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

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

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

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。

<a href="http://davidhayden.com/blog/dave/archive/2006/11/03/CachingStoredProcedureParameters.aspx">http://davidhayden.com/blog/dave/archive/2006/11/03/CachingStoredProcedureParameters.aspx</a>

<a href="http://davidhayden.com/blog/dave/archive/2006/11/01/SqlCommandBuilderDeriveParameters.aspx">http://davidhayden.com/blog/dave/archive/2006/11/01/SqlCommandBuilderDeriveParameters.aspx</a>

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

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