微软企业库5.0学习笔记(三十三)数据访问模块

  前言

  鉴于企业库5.0已经发布正式版,同时有广大读者的要求(臭屁一下,o(∩_∩)o...),后面文章的内容和代码将基于Enterprise Library5.0和Unity2.0来写,感谢大家的一贯支持。

  正文

  数据库访问模块都能实现哪些功能呢?数据库访问模块抽象类你正在使用的数据库,提供了一些列接口,使得你可以更容易的实现常用的数据库访问功能。例如:使用Database类填充DataSet数据集,用database类获取一个适当的Command实例,然后调用database的ExecuteDataSet方法,就可以填充数据集。不需要你调用DataAdapter的Fill方法。ExecuteDataSet方法管理数据库连接,实现了填充数据集所需要的所有工作。使用类似的方法,通过database类可以直接执行command,可以获取一个DataReader实例,可以用dataset中的数据更新数据库。模块也支持多个操作的事务,如果失败的话,可以回滚。

  除了使用ADO.NET也能完成的常用功能以外,模块还支持异步访问数据库(只要数据支持)。还可以返回客户端可以用LINQ查询的数据的序列对象形式。

  使用数据访问模块的主要优点,除了简化开发以外,它使得你可以创建一种provider独立的应用,可以很容易的更换不同的数据提供源。在大多数情况下,除非你在代码中指定了数据库类型,剩下的就是更改配置文件中的连接字符串配置节就可以了。不需要你修改代码中的sql查询和存储过程及其参数。

  数据访问模块提供的常用方法

  下面列出一些模块常用的获取数据、更新数据方法,其中有一些和直接使用ADO.NET中的方法很相似。

  

 

方法

功能

ExecuteDataset,创建,加载,返回数据集

LoadData,加载数据到一个已经存在的数据集

UpdateDataSet,使用已经存在的数据集更新数据库内容

填充一个数据集,使用数据集更新数据库

ExecuteReader,创建,返回一个provider独立的DbDataReader实例

从数据库读取多行数据

ExecuteNonQuery,执行command,返回数据库受影响的行数,可以通过output返回多个值

ExecuteScalar,执行command,返回单个值

执行command数据库命令对象

ExecuteSproAccessor,使用存储过程返回一个客户端可以查询的序列对象

ExecuteSqlStringAccessor,使用SQL语句返回一个客户端可以查询的序列对象

以序列对象的形式返回数据

ExecuteXmlReader,返回xml格式的数据,xmlReader类型,这个只能用在SQL Server数据库,通过SqlDatabase类调用,Database类中没有这个方法。

获取xml格式数据(只能用在SQL Server数据库)

GetStoredProcCommand,返回一个存储过程的数据库command对象

GetSqlStringCommand,返回一个SQL语句的数据库command对象

创建一个Command对象

AddInParameter,创建一个新的input参数,并且加入command的参数集合

AddOutParameter,创建一个新的output参数,并且加入command的参数集合

AddParameter,创建一个指定类型的参数,并且加入command的参数集合

GetParameterValue,以Object类型返回指定参数的值

SetParameterValue,给指定参数赋值

 

处理command的参数

CreateConnection,创建,返回当前数据库的连接,允许你通过这个链接初始化和管理数据库事务

处理数据库事务

 

      如果你使用SqlDatabase类的话,可以使用Begin和End类型的方法实现数据库异步操作。

      如何使用数据库访问模块

      1首先通过企业库的配置工具添加模块配置

      2在代码中添加如下代码

     

 

ExpandedBlockStart.gif代码
static Database defaultDB = null;
static Database namedDB = null;
// 从容器中获取默认的数据库对象
// The actual concrete type is determined by the configuration settings.
defaultDB = EnterpriseLibraryContainer.Current.GetInstance<Database>();
// 从容器中获取指定名称的数据库对象
namedDB
= EnterpriseLibraryContainer.Current.GetInstance<Database>("ExampleDatabase");

 

       如果你需要使用ExecuteXmlReader方法,或者是需要使用SQL Server数据库对象的话,可以用下面的代码。

 

ExpandedBlockStart.gif代码
static SqlDatabase sqlServerDB = null;
// Resolve a SqlDatabase object from the container using the default database.
sqlServerDB = EnterpriseLibraryContainer.Current.GetInstance<Database>()
as SqlDatabase;

// Assume the method GetConnectionString exists in your application and
// returns a valid connection string.
string myConnectionString = GetConnectionString();
SqlDatabase sqlDatabase 
= new SqlDatabase(myConnectionString);

 

      使用DataReader获取多行数据

 

ExpandedBlockStart.gif代码
// Call the ExecuteReader method by specifying just the stored procedure name.
using (IDataReader reader = namedDB.ExecuteReader("MyStoredProcName"))
{
// Use the values in the rows as required.
}

// Call the ExecuteReader method by specifying the command type
// as a SQL statement, and passing in the SQL statement.
using (IDataReader reader = namedDB.ExecuteReader(CommandType.Text,
"SELECT TOP 1 * FROM OrderList"))
{
// Use the values in the rows as required ‐ here we are just displaying them.
DisplayRowValues(reader);
}

 

      根据参数获取多行数据

     

 

ExpandedBlockStart.gif代码
using (IDataReader reader = defaultDB.ExecuteReader("ListOrdersByState",
new object[] { "Colorado" }))
{
// Use the values in the rows as required ‐ here we are just displaying them.
DisplayRowValues(reader);
}

 

     

     

      通过添加参数获取多行数据

ExpandedBlockStart.gif代码
// Read data with a SQL statement that accepts one parameter.
string sqlStatement = "SELECT TOP 1 * FROM OrderList WHERE State LIKE @state";
// Create a suitable command type and add the required parameter.
using (DbCommand sqlCmd = defaultDB.GetSqlStringCommand(sqlStatement))
{
defaultDB.AddInParameter(sqlCmd, 
"state", DbType.String, "New York");
// Call the ExecuteReader method with the command.
using (IDataReader sqlReader = namedDB.ExecuteReader(sqlCmd))
{
Console.WriteLine(
"Results from executing SQL statement:");
DisplayRowValues(sqlReader);
}
}

 

     

 

 

 

ExpandedBlockStart.gif代码
// Create a suitable command type and add the required parameter.
using (DbCommand sprocCmd = defaultDB.GetStoredProcCommand(storedProcName))
{
defaultDB.AddInParameter(sprocCmd, 
"state", DbType.String, "New York");
// Call the ExecuteReader method with the command.
using (IDataReader sprocReader = namedDB.ExecuteReader(sprocCmd))
{
Console.WriteLine(
"Results from executing stored procedure:");
DisplayRowValues(sprocReader);
}
}

 

      以对象形式返回数据

     

      上图是一个使用Accessor访问数据库,返回对象形式的数据的过程。

未完待续。。。。。。。。。。。。。。。。。。。。。。。。

 

转载于:https://www.cnblogs.com/virusswb/archive/2010/05/14/Enterprise-Library-DataAccessBlock-3.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ARM中断分析之一:中断控制器和CPU、外设的关系

“中断控制器”也是CPU众多外设中的一个&#xff0c;不同的是&#xff0c;它一方面接收其它外设中断引脚的输入&#xff0c;另一方面&#xff0c;它会发出中断信号给CPU。下图是一张中断控制器外设的框图&#xff0c;s3c2410的框图。 为了把中断控制器、CPU、外设联系起来&…

【转】Jenkins项目常用三种构建类型风格详解

转自&#xff1a;Jenkins项目常用三种构建类型风格详解_ぃ小小宇宙的博客-CSDN博客_jenkins项目类型 Jenkins构建的项目类型介绍 jenkins 的安装配置请参考&#xff1a;《jenkins war包安装部署&#xff0c;tomcatJDKmaven》 Jenkins中自动构建项目的类型有很多&#xff0c;…

ARM中断分析之二:裸机下面的中断处理

EINT4中断的裸机处理 这是基于S3C2410的EINT4中断的裸机处理&#xff0c;当中断发生时就把LED灯取反显示。下面是电路图。 上面是外部KEY连接到CPU的EINT4引脚上面&#xff0c;即&#xff1a;按下键就会产生一个中断。 按照先前介绍的&#xff0c;中断处理流程来介绍&#xff0…

单节点hadoop部署成功

经过前面的配置&#xff1a; linux-ot1w:/home/macula/download/hadoop-0.20.2 # bin/start-all.sh starting namenode, logging to /home/macula/download/hadoop-0.20.2/bin/../logs/hadoop-macula-namenode-linux-ot1w.out Password: localhost: starting datanode, logging…

【转】Jenkins 构建触发器操作详解

转自&#xff1a;Jenkins 构建触发器操作详解 - 习久性成 - 博客园 前言 触发远程构建 【https://www.cnblogs.com/Rocky_/p/8297260.html】 例如&#xff0c;使用脚本&#xff1a;通过一个网址的访问来触发构建&#xff0c;这样就不需要登录jenkins系统也能触发构建了。 示…

ARM中断分析之三:WinCE驱动的中断分析

现在有许多高端的ARM芯片&#xff0c;像苹果、三星、华为都采用ARM芯片做为智能手机芯片。 这篇文章介绍基于ARM的WinCE操作系统的驱动的中断分析。WinCE驱动分为两类&#xff0c;这里介绍流驱动&#xff0c;流驱动比较简单。 关于流驱动&#xff0c;下面是一张框图&#xff0c…

【转】密码破解全能工具:Hashcat密码破解攻略

转自&#xff1a;密码破解全能工具&#xff1a;Hashcat密码破解攻略 - FreeBuf网络安全行业门户 Hashcat密码破解 hashcat号称世界上最快的密码破解&#xff0c;世界上第一个和唯一的基于GPGPU规则引擎&#xff0c;免费多GPU&#xff08;高达128个GPU&#xff09;&#xff0c…

基于Visual Studio2010讲解LINQ读出数据库数据生成XML

LINQ to XML 是一种启用了 LINQ 的内存 XML 编程接口&#xff0c;使用它&#xff0c;可以在 .NET Framework 编程语言中处理 XML。 LINQ to XML 最重要的优势是它与 Language-Integrated Query (LINQ) 的集成。 由于实现了这一集成&#xff0c;因此&#xff0c;可以对内存 XML…

ARM中断分析之四:WinCE的OAL层的中断分析

从前面的介绍&#xff0c;我们知道了裸机中断处理的流程、WINCE驱动的中断处理&#xff0c;但是&#xff0c;WINCE底层是怎么处理中断的呢&#xff1f;这里就是介绍WinCE系统的OAL层的中断处理。它和裸机的处理总体一样&#xff0c;只是实现细节方面有点区别&#xff0c;具体流…

【转】TinyXML2 入门教程

转自&#xff1a;TinyXML2 入门教程_恋喵大鲤鱼的博客-CSDN博客_tinyxml2中文指南 代码编译运行环境&#xff1a;Linux 64bits Debug g -m64&#xff08;-m 表示生成 64bits 的程序&#xff09; 文章目录 1.TinyXML2 概述2. TinyXML1 与 TinyXML2 对比3. TinyXML2 用法用例…

解决“A problem has been encountered while loading the setup components. Canceling setup.”的问题...

近来因为需要开发C的程序&#xff0c;所以要在Visual Studio 2008中添加C的开发组件&#xff0c;但是在添加组件的时候&#xff0c;弹出“A problem has been encountered while loading the setup components. Canceling setup.”的提示。无奈之下&#xff0c;只好卸载&#x…

【转】linux 查看动态库和可执行程序依赖库

转自&#xff1a;linux 查看动态库和可执行程序依赖库_帅的没朋友~的博客-CSDN博客_linux 查看动态库 目录 一:objdump二:readelf三:ldd四:进程是否依赖指定一:objdump # 查看依赖的库 objdump -x xxx.so | grep NEEDED# 查看可执行程序依赖的库 objdump -x ./testTime | gr…

WinCE下的GPIO中断的处理

在我所负责的音频驱动部分代码中,采用了PXA270的GPIO34来检测Headphone的插入与拔出.原驱动部分有个BUG,即当耳机插入以后,耳机和喇叭同时在响,很明显没有对耳机插入事件做出响应.所以我开始采用了检测GPIO信号拉高或者拉低和检测耳机的插入事件,但是这样做有个问题,就是会有延…

xvhfeng的工作回忆总结(第二年)阅读手记

xvhfeng 工作回忆总结&#xff08;第二年&#xff09; 上接工作第一年回忆总结,时间来到了工作第二年&#xff0c;我在PM的帮助下拿到了令自己满意的工资&#xff0c;又开始加入公司正常的工作。 上文说到有一个外省市&#xff08;以下称为A市&#xff09;的项目在做&#xff…

【转】详解JS的四种异步解决方案:回调函数、Promise、Generator、async/await

转自&#xff1a;详解JS的四种异步解决方案&#xff1a;回调函数、Promise、Generator、async/await 同步&异步的概念 在讲这四种异步方案之前&#xff0c;我们先来明确一下同步和异步的概念&#xff1a; 所谓同步(synchronization)&#xff0c;简单来说&#xff0c;就是…

S3C2440中断解析和基于WINCE操作系统的中断分析(整理于网络,用于按键中断使用)

在调试CAN总线的时候&#xff0c;遇到了操作系统的中断&#xff0c;为了彻底的弄清楚中断是怎么回事&#xff1f;我先从底层的中断开始研究&#xff0c;在这里我们只讨论外部中断&#xff0c;下面就结合S3C2440TEST测试程序来分析一下中断是怎么执行的&#xff1a;我们研究的是…

修改 MrBayes 3.2 源码解决不能恢复断点的问题

当数据量较大时&#xff0c;用MrBayes进行计算通常是旷日持久的事情&#xff0c;几天甚至几个月。中间如果断电死机什么的发生就很令人发狂了。于是 MrBayes 3.2 svn 版增加了一个断点保存的功能&#xff0c;死机后可以从保存的断点处继续计算。只要在mcmc命令中加入checkfreqn…

【转】ubuntu下为APT设置代理

转自&#xff1a;https://blog.csdn.net/lwbeyond/article/details/8431927 Ubuntu下为APT设置代理一.最简单的方法 图形界面方法&#xff1a;新立得软件包管理器-->设置-->首选项-->网络。 进行设置代理就可以了。二.编辑命令 方法1&#xff1a;验证通过 如果您 希望…

wince6.0 s5pv210 中断

1. 在smdkv210\src\oal\oallib\ksarm.h头文件里可以看到wince的中断定义。 设备中断的起始编号即wince预定义的设备中断ID的基值 SYSINTR_DEVICES EQU 8 一共支持64个设备中断 SYSINTR_MAX_DEVICES EQU 64 可用的设备…

Regular Expression

Reference: 正则表达式三十分钟入门&#xff1a; http://deerchao.net/tutorials/regex/regex.htm 在线测试工具&#xff1a; regexlib&#xff08;http://regexlib.com/default.aspx&#xff09; 吐血推荐&#xff0c;比较狠的一个工具&#xff1a; Expresso &…