本篇讲述如何在应用中使用数据访问模块。首先,讲述如何配置模块并且和应用整合;其次是,如何使用数据访问模块完成常用的功能,例如,获取单条数据,或者是使用DataSet返回多条数据;最后,讲述一些关系连接管理、参数处理、异常处理的主题。
主要包括下面的主题:
- 配置模块
- 在应用中添加代码
- 创建Database对象
- 创建DbCommand对象
- 管理连接
- 使用TransactionScope类
- 创建分布式的数据库应用
- 异常处理
- 参数处理
1、配置模块
默认情况下,配置信息是不加密的,里面的用户名和密码等敏感信息是明文的。虽然config文件从外界是访问不到的,但是还是要做好加密工作。可以对文件进行加密,或者是配置节加密,以及读写的权限控制。
2、配置信息的的结构
代码
<!--<br/ />
<br/ />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />
http://www.CodeHighlighter.com/<br/ />
<br/ />
--><configSections>
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<section name="oracleConnectionSettings" type="Microsoft.Practices.EnterpriseLibrary.Data.Oracle.Configuration.OracleConnectionSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</configSections>
3、添加应用代码
数据访问模块支持访问数据库的常用方案。
首先要做一些准备工作,然后就是创建Database对象,调用适当的方法来完成所需功能。
准备工作:
1)添加模块的程序集引用。添加对程序集Microsoft.Practices.EnterpriseLibrary.Data.dll的引用。
2)添加对程序集Microsoft.Practices.EnterpriseLibrary.Common.dll和Microsoft.Practices.ObjectBuilder2.dll的引用。
3)在代码文件中添加命名空间:
<!--<br/ />
<br/ />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />
http://www.CodeHighlighter.com/<br/ />
<br/ />
-->using Microsoft.Practices.EnterpriseLibrary.Data;
using System.Data;
4、创建Database对象
所有的数据访问方法都是通过Database对象执行的,你可以使用DatabaseFactory类创建Database对象。工厂创建的具体的Database类型决定于应用的配置信息。另外你可以使用Unity创建数据访问模块的对象。
你可以使用配置工具制定默认的Database实例,当DatabaseFactory调用没有参数的CreateDatabase方法的时候就会创建默认的Database实例。下面的代码是没有使用Unity的情况下创建Database对象。
<!--<br/ />
<br/ />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />
http://www.CodeHighlighter.com/<br/ />
<br/ />
-->Database db = DatabaseFactory.CreateDatabase();
也可以指定名称来创建Database对象,例如:
<!--<br/ />
<br/ />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />
http://www.CodeHighlighter.com/<br/ />
<br/ />
-->Database db = DatabaseFactory.CreateDatabase("Sales");
你也可以通过连接字符串创建指定类型的Database对象。在下面的代码中,假定GetConnectionString方法可以获取一个Sql Server的连接字符串,就可以用SqlDatabase类的构造函数创建SqlDatabase对象。
代码
<!--<br/ />
<br/ />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />
http://www.CodeHighlighter.com/<br/ />
<br/ />
-->// Assume the method GetConnectionString exists in your application and // returns a valid connection string.
string myConnectionString = GetConnectionString();
SqlDatabase sqlDatabase = new SqlDatabase(myConnectionString);
5、创建DbCommand对象
创建DbCommand对象的方法分类两类:
- 一类是代表存储过程调用的DbCommand对象
- 一类是代表SQL语句的DbCommand对象
为存储过程创建DbCommand的方法还提供了参数缓存。
创建DbCommand对象的方法都在Database类上,包括:
- GetStoredProcCommand,为存储过程创建一个DbCommand对象
Database db = DatabaseFactory.CreateDatabase();
DbCommand cmd = db.GetStoredProcCommand("GetProductsByCategory");
- GetSqlStringCommand,为SQL语句创建一个DbCommand对象
<!--<br/ />
<br/ />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />
http://www.CodeHighlighter.com/<br/ />
<br/ />
-->Database db = DatabaseFactory.CreateDatabase();
string sql = "Select CustomerID, LastName, FirstName From Customers";
DbCommand cmd = db.GetSqlStringCommand(sql);
6、连接管理
数据库连接是有限的资源,对于可扩展的应用来说,正确的管理他们是必要的。只在需要的时候保持连接打开、不需要时候关闭他们是一个很好的实践。Database类的大部分方法在每次调用数据库的时候都需要处理打开和关闭数据库。应用中不需要包含这方面的处理代码。默认情况下,由于性能原因,当你使用close方法的时候,ADO.NET会将连接返回给连接池,而不是关闭它们。因此,你不需要缓存Database对象。
例如,执行ExecuteDataSet方法返回一个包含数据的DataSet对象。将返回一个本地的拷贝,ExecuteDataSet方法将会打开一个连接,加载数据到DataSet,然后再返回结果之前关闭链结。
代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->Database db = DatabaseFactory.CreateDatabase();
string sql = "Select ProductID, ProductName From Products";
DbCommand cmd = db.GetSqlStringCommand(sql);
// No need to open the connection; just make the call.
DataSet customerDataSet = db.ExecuteDataSet(cmd);
但是,也有另外一种情况,什么时候关闭连接不是很清楚。例如,ExecuteReader方法。这个方法返回一个实现IDataReader接口的对象。关闭DataReader之后,连接会自动关闭。
代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->Database db = DatabaseFactory.CreateDatabase();
DbCommand cmd = db.GetSqlStringCommand("Select Name, Address From Customers");
using (IDataReader reader = db.ExecuteReader(cmd))
{
// Process results
}
7、使用TransactionScope类
Database类中的一些方法使用了.NET 框架的TransactionScope类。这个类自动将数据库调用组合成一个事务,
代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
int dRows = db.ExecuteNonQuery(CommandType.Text, insertString);
dRows = db.ExecuteNonQuery(CommandType.Text, insertString2);
}
这两个ExecuteNonQuery方法插入数据的方法组成一个事务。TransactionScope类创建一个本地的,轻量的事务。假定你在事务中的数据库调用使用同一个连接。这意味着,不用传递DbTransaction实例,只是简单的传递连接,.NET框架自动为你执行的每个command创建事务。
企业库在正常情况下,为每一个请求打开和关系连接。
转自:http://www.cnblogs.com/virusswb/archive/2010/05/04/Enterprise-Library-4-1-DataAccess-2.html
相关推荐
支持所有数据库原生操作(基于微软企业库的数据模块,并集成了日志模块,所有数据库操作异常使用企业库写日志)解除与数据库表模型一一对应的关系,由开发人员灵活指定映射关系。支持直接使用SQL语句并根据查询结果...
它由数十个专用模块构成,功能包括数据访问、数据储存及管理、应用开发、图形处理、数据分析、报告编制、运筹学方法、计量经济学与预测等等。 SAS系统基本上可以分为四大部分:SAS数据库部分;SAS分析核心;SAS开发...
翻箱底时找到了SQLHelper.cs,微软官方推出的sql server数据访问模块,仔细看了下,非阉割的版本(我一字没改),英文注释,功能齐全(一些教程上没介绍到的功能这里面也有),推荐刚学ASP.NET的新手下载来研究研究...
具体模块包括: 语义层:为统一的查询建模平台和数据访问接口。除提供标准的查询建模能力外,还有语义驱动、语义规则、语义函数、描述器等等扩展方式,满足不同层面的扩展要求。 OLAP引擎:OLAP引擎提供全面的多维...
相当于特殊功能支持库->取变量数据地址。 8、新增“类_环境存取”类模块,可以新建、编辑、删除当前用户或系统环境变量,无需重启立刻生效。 精易模块 V3.83 what’s new:(20140901) 1、改善“网页_访问”、...
精易模块 V5.7 what's new: (20170501) 1、修复“目录_清空”,“目录_强力清空”,“目录_删除”,“目录_枚举子目录”,“目录_同步更新”,“目录_更新”,“目录_是否有子目录”,“目录_枚举子目录1”,命令...
<<page 1>> page begin==================== 目 目目 目 录 录录 ... 1.1 Microsoft.NET——一场新的革命.4 ... 比尔.... Microsoft.NET 的概念 ... 1.1 Microsoft.NET 一场新的革命 ...这一天 微软公司正式推出了其下一代...
asp.net 2.0-实现数据访问(1) ASP.NET 2.0 新特性 .NET 2.0里使用强类型数据创建多层应用 在MastPage中引用脚本资源 2.0正式版中callback的一些变化+使用示例(ASP.NET 2.0) asp.net 2.0 新特性 Visual Web ...
微软海天技术大会综合系统由在线签到、注册、手机网、在线闯关、现场问答等各模块组合而成,通过调用统一的webservice服务来实现数据之前的共享。本系统已成功应用于2011-11.24举行的微软海天技术大会。 对各项目...
4、采用微软ADO技术进行网络访问好处:使用户可以通过网络进行局域网访问数据服务器,方便简洁。 ●软件优势: 1、 随时可知道哪些铺位是空铺,可进行入住。 2、 随时可知道哪些企业的人员住在哪些铺位,并且知道该...
SIMBA.DLL 和基于标准的数据访问诞生了。通过在程序中使用 ODBC 语句,您可以访问多个不同公共数据库中的文件。除了 ODBC 软件,每个要访问的数据库都需要一个单独的模块或驱动程序。 ODBC为客户端程序提供了访问...
传统OPt服务器基于COM/DCOM组件技术,导致...采用服务器地址空间的节点、引用等核心技术,设计实现了地址空间的节点管理、数据管理、访问管理、订阅管理和视域管理等 功能类.设计完成了独立的OPC UA地址空间功能模块
本系统使用的是美国微软公司的MICROSOFT VISUAL J++6.0。...Visual J++通过ActiveX Data Object(ADO, ActiveX数据对象)控件来访问数据,这是用于WFC应用程序的数据编程模块。ADO对象的内核包含Connection(连接)、Comma
<br/>Enterprise Library是微软Patterns & Practices 项目组 推出的公共模块解决方案,用来解决我们在企业级开发中遇到公共问题,如配置管理、数据访问、缓存管理、记录操作日志、异常管理、加密解密、权限管理...
<br/>Enterprise Library是微软Patterns & Practices 项目组 推出的公共模块解决方案,用来解决我们在企业级开发中遇到公共问题,如配置管理、数据访问、缓存管理、记录操作日志、异常管理、加密解密、权限管理...
<br/>Enterprise Library是微软Patterns & Practices 项目组 推出的公共模块解决方案,用来解决我们在企业级开发中遇到公共问题,如配置管理、数据访问、缓存管理、记录操作日志、异常管理、加密解密、权限管理...
本系统已成功应用于2011-11.24举行的微软海天技术大会. 本系统包含在线签到,注册,手机网,在线闯关,现场问答等各模块组合而成. 通过调用统一的webservice服务来实现数据之前的共享. 对各项目分别介绍一下: 1....
RBAC实现了用户与访问权限的逻辑分离,更符合教务平台的用户、数据和应用特征;在公共模块中实现了系统通用的日志管理,异常处理,常用类库方法等。通过设计和应用本系统,有效的解决了教务平台中关于用户管理与权限...
静态编译后的易语言EXE/DLL之间不能再共享譬如窗口、窗口组件等类似资源,对于已经静态连接到一个EXE/DLL中的支持库,该支持库中的数据或资源将不能再被其它EXE/DLL中所使用的同名支持库访问。这是因为代码被分别...
库、ASP.NET 访问其他数据源、ASP.NET MVC、LINQ 及Lambda 表达式、WCF 应用开发、WPF 应用开 发以及图形图像编程等内容。为了便于读者学习和理解ASP.NET 的知识,本书最后几章进行了不同的小型 模块的开发,以便...