Data Access Application Block 学习手册
Data Access Application Block 仍旧是Enterprise Library 中的一个组建,目的是提供数据反问层功能的抽象,除了支持存储过程外也支持SQL的调用,当然现在有另外一个新的技术也可以完成类似的工作,Linq,2种技术各有各的特点和好处,要看你是如何使用了,如果你喜欢自己去构建自己的DAO(Data Access Object)的话,并且组织属于自己平台的数据访问控制,那么Data Access Application Block 是首选,如果你更热爱于Herbinate那种用对象直接来操作数据库的方法并且你的数据库是SQL SERVER 那么你就用LINQ。![]()
使用Data Access Application Block的好处有哪些呢?
1. 通过对于ADO.NET 2.0的整合,提供了便于开发使用的函数集
2. 通过模板代码降低代码量,提高标准操作的开发效率
3. 在应用和企业中帮助维护持久数据访问
4. 降低由于变化数据类型而产生的难度
5. 让程序员能从为了不同的数据类型而别写不同的Model代码中解脱出来
可以通过简单的Configuration Management工具,直接在你的web.config文件中添加相应的配置,这些配置包括了数据库连接字符串等。
添加代码
1. 把以下dll添加到你的项目中:
Microsoft.Practices.EnterpriseLibrary.Data.dll
Microsoft.Practices.EnterpriseLibrary.Common.dll
Microsoft.Practices.ObjectBuilder2.dll
2. 在你的代码中添加以下引用
using Microsoft.Practices.EnterpriseLibrary.Data;
using System.Data;
3. 创建数据库
Database db=DatabaseFactory.CreateDatabase();
如创建一个名字为Sales的数据库实例
Database db=DatabaseFactory.CreateDatabase(“Sales”);
不同的数据库使用不同的数据库工厂SqlClientFactory,SqlCeProviderFactory,OrcaleClientFactory
当然也可以通过连接字符串来创建一个数据库实例
SqlDatabase sqlDatabase = new SqlDatabase(myConnectionString);
也可以使用泛化数据库实例多想来创建一个数据库实例,并且在参数中指定具体的数据库类型
GenericDatabase db = new GenericDatabase(connectionString, OdbcFactory.Instance);
4. 创建DbCommand对象
a. 创建单个SQL语句的DbCommand
DbCommand cmd = db.GetSqlStringCommand(sqlstr);
b. 创建存储过程的DbCommand
DbCommand cmd = db.GetStoreProcCommand(spname);
5. 连接的管理
a. 对于ExecuteDataSet,平台会自动打开数据库连接,并且在返回了DataSet后关闭连接
b. 对于ExecuteReader方法,使用using (IDataReader reader= db.ExecuteReader(cmd)){}以取保reader在消失前先关闭。
6. 事务管理
a. 标准事务管理方式
using (DbConnection conn = db.CreateConnection())
{
conn.Open();
DbTransaction trans = conn.BeginTrans();
trans.Commit();
trans.Rollback();
conn.Close();
}
b. 使用TransactionScope进行事务管理
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequireNew)){}
7. 存储过程参数设置
a. AddParameter——添加输入/输出类型的参数
b. AddInParameter——添加输入参数
c. AddOutParameter——添加输出参数
d. GetParameterValue——获得参数值
e. SetParameterValue——设置参数值
如果存储过程返回一个结果集的情况下,那么对于Oracle有特殊的处理方式
object results = new object[2];
DbCommand cmd = db.GetStoredProcCommand(“xxx”,results);
对于开发跨数据库应用时的注意事项
1. 避免在存储过程参数名中使用“@”,因为这个只是对于SqlServer才有用的,如果使用SqlDatabase,那么添加存储过程参数的时候,系统会自动给参数添加@
2. 从Database对象接受参数值
3. 注意数据库的大小写敏感,尽量用统一的命名方式
4. 避免使用数据库特有的数据类型,例如:OracleBlob
5. 避免使用存储过程的返回值return value,取而代之的使用输出参数
6. 将参数添加入参数列表的时候,一定确保顺序是和数据库中是一致的
7. 避免向存储过程的参数传空值

浙公网安备 33010602011771号