企业库数据库访问模块通过抽象工厂模式 , 允许用户通过简单的配置选择不同的数据库作为程序的数据源 , 大大解决了切换数据库时带来的麻烦 . 因为我本机只安装了 SQL Server 2005, 所以在此只做 SQL 的演示 , 需要深究的朋友可以访问以下网站 : http://msdn.m

企业库数据库访问模块通过抽象工厂模式,允许用户通过简单的配置选择不同的数据库作为程序的数据源,大大解决了切换数据库时带来的麻烦.因为我本机只安装了SQL Server 2005,所以在此只做SQL的演示,需要深究的朋友可以访问以下网站:

http://msdn.microsoft.com/en-us/library/ff664408%28v=PandP.50%29.aspx

企业库数据库访问模块的几大功能:

1.最简单的功能,通过ExecuteNonQuery.方法执行SQL语句.

2.执行ExecuteDataSet,返回DataSet类型的数据集.

3.执行ExecuteScalar,获取返回的第一行第一列的信息.

4.执行存储过程.

5.通过代码实现事务.

6.通过DataSet更新数据库.

7.返回值XML化.

8. 将返回的数据对象化.

9. 异步访问数据库.

以上的功能我会在下面一一介绍,测试程序我已打包,大家可以点击这里下载.

下面介绍如何使用Microsoft Enterprise Library 5.0中的数据库访问模块.

1. 首先创建一个测试数据库,创建数据库的SQL文件我打包在压缩包里了,大家可以点击上面的下载链接下载.执行完SQL文件后,可以看到我们创建好的TestDB数据库:

2. 下载安装好MicrosoftEnterprise Library 5.0,然后在运行EntLibConfig.exe,选择Blocks菜单 ,单击 AddDatabase Settings .

3. 配置好文件之后保存为App.config文件,并添加到创建好的应用程序中.并添加相应的引用,在此我不再多讲,大家下载我打包好的程序运行即可看到

4. 下面来介绍我在应用程序中实现的各个功能:

(1) 通过ExecuteNonQuery.方法执行SQL语句:

//执行ExecuteNonQuery///privatevoidExecuteNonQuery_Click(objectsender, EventArgs e)

{

db.ExecuteNonQuery(CommandType.Text,"INSERT INTO [College] ([CollegeID],[Name]) values (6,'体育学院')");

}

(2) 执行ExecuteDataSet,返回DataSet类型的数据集.

//执行ExecuteDataSet,返回College列表//privatevoidExecuteDataSet_Click(objectsender, EventArgs e)

{stringsql="select * from College";

DbCommand dw=db.GetSqlStringCommand(sql);

dataGridView1.DataSource=db.ExecuteDataSet(dw).Tables[0];

}

(3) 执行ExecuteScalar,返回第一行第一列的值.

//执行ExecuteScalar,返回第一行第一列的值//privatevoidExecuteScalar_Click(objectsender, EventArgs e)

{

Database db=DatabaseFactory.CreateDatabase("ConnectionString");stringsql="select [Name] from College where [CollegeID] = 1";

DbCommand dc=db.GetSqlStringCommand(sql);stringstr="获取的学院名称为:"+(string)db.ExecuteScalar(dc);

MessageBox.Show(str);

sql="select [CollegeID] from College where [CollegeID] = 1";

dc=db.GetSqlStringCommand(sql);

str="获取的学院ID为:"+(int)db.ExecuteScalar(dc);

MessageBox.Show(str);

}

(4) 执行存储过程.

//执行存储过程///privatevoidStoredProcCommand_Click(objectsender, EventArgs e)

{

DbCommand dc=db.GetStoredProcCommand("usp_College_LoadByID");

db.AddInParameter(dc,"@CollegeID", System.Data.DbType.Int32,5);

dataGridView1.DataSource=db.ExecuteDataSet(dc).Tables[0];

}

(5) 通过代码实现事务.

//事务///privatevoidTransaction_Click(objectsender, EventArgs e)

{

DbCommand dc1=db.GetStoredProcCommand("usp_College_Insert");

db.AddInParameter(dc1,"@CollegeID", DbType.Int32,7);

db.AddInParameter(dc1,"@Name", DbType.String,"文旅学院");

DbCommand dc2=db.GetStoredProcCommand("usp_College_Insert");

db.AddInParameter(dc2,"@CollegeID", DbType.Int32,7);

db.AddInParameter(dc2,"@Name", DbType.String,"化工学院");using(DbConnection conn=db.CreateConnection())

{

conn.Open();

DbTransaction trans=conn.BeginTransaction();try{//添加一个ID为7的学院db.ExecuteNonQuery(dc1, trans);//添加一个ID为7的学院,主键重复,事务将回滚db.ExecuteNonQuery(dc2, trans);//提交事务.trans.Commit();

}catch{//回滚trans.Rollback();

}

conn.Close();

}//查看数据库,数据未被添加,说明事务已回滚ExecuteDataSet_Click(null,null);

}

(6) 通过DataSet更新数据库.

//通过DataSet更新数据库///privatevoidDataSetUpdate_Click(objectsender, EventArgs e)

{

DataSet productsDataSet=newDataSet();stringsql="Select * From College";

DbCommand cmd=db.GetSqlStringCommand(sql);stringCollegeTableName="College";//恢复原始数据db.LoadDataSet(cmd, productsDataSet, CollegeTableName);//获取数据表格DataTable dTable=productsDataSet.Tables[CollegeTableName];//添加一个新信息入DataSet中DataRow addedRow=dTable.Rows.Add(newobject[] {8,"外国语学院"});//修改一个原有数据dTable.Rows[0]["Name"]="国教院";//提供插入,更新,删除存储过程DbCommand insertCommand=db.GetStoredProcCommand("usp_College_Insert");

db.AddInParameter(insertCommand,"@CollegeID", DbType.Int32,"CollegeID", DataRowVersion.Current);

db.AddInParameter(insertCommand,"@Name", DbType.String,"Name", DataRowVersion.Current);

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

db.AddInParameter(deleteCommand,"@CollegeID", DbType.Int32,"CollegeID", DataRowVersion.Current);

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

db.AddInParameter(updateCommand,"@CollegeID", DbType.Int32,"CollegeID", DataRowVersion.Current);

db.AddInParameter(updateCommand,"@Name", DbType.String,"Name", DataRowVersion.Current);//通过DataSet更新数据库introwsAffected=db.UpdateDataSet(productsDataSet, CollegeTableName, insertCommand, updateCommand, deleteCommand,

Microsoft.Practices.EnterpriseLibrary.Data.UpdateBehavior.Standard);

MessageBox.Show("影响的行数:"+rowsAffected);

}

(7) 返回值XML化.

//返回值XML化///privatevoidReturnXML_Click(objectsender, EventArgs e)

{//使用"FOR XML AUTO"参数使得SQL返回XML格式的信息SqlDatabase sqldb=(SqlDatabase)DatabaseFactory.CreateDatabase("ConnectionString");

DbCommand cmd=sqldb.GetSqlStringCommand("SELECT * FROM College FOR XML AUTO");

IEnumerableproductList;using(var reader=sqldb.ExecuteXmlReader(cmd))

{if(reader.IsStartElement())

{

var root=(XElement)XNode.ReadFrom(reader);

productList=root.Elements("CollegeID")

.Attributes("Name")

.Select(a=>a.Value).ToArray();

MessageBox.Show(((XElement)root).ToString());

}

}

}

(8) 将返回的数据对象化.

//DataAsObject///privatevoidDataAsObject_Click(objectsender, EventArgs e)

{//将返回的数据对象化var results=db.ExecuteSprocAccessor("usp_College_LoadAll");

MessageBox.Show(results.ElementAt(0).ToString());

}

(9) 异步访问数据库.

//异步访问数据库///privatevoidAsync_Click(objectsender, EventArgs e)

{//创建新的数据库连接,属性必须添加:Asynchronous Processing=trueString connectionString=@"server=(local); database=TestDB; Integrated Security=true; Asynchronous Processing=true";

Database Sqldb=newSqlDatabase(connectionString);

DbCommand cmd=Sqldb.GetStoredProcCommand("usp_College_LoadbyID");

Sqldb.AddInParameter(cmd,"@CollegeID", DbType.Int32,1);try{

IAsyncResult result=Sqldb.BeginExecuteReader(cmd, MyEndExecuteCallback, Sqldb);

}catch(Exception ex)

{

MessageBox.Show(ex.ToString());

}

}//当获取完毕执行该函数privatevoidMyEndExecuteCallback(IAsyncResult result)

{try{

Database Sqldb=(Database)result.AsyncState;

IDataReader reader=db.EndExecuteReader(result);

College c=newCollege((int)reader[0], (string)reader[1]);

MessageBox.Show(c.ToString());

}catch(Exception ex)

{

MessageBox.Show(ex.ToString());

}

}

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

黄聪mysql_黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Acc相关推荐

  1. 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级) 本章介绍的是企业库加密应用程序模块 ...

  2. 黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block

    黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block 原文:黄聪:Microsoft Ent ...

  3. Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (初级)

    企业库加密应用程序模块提供了2种方式让用户保护自己的数据: Hashingproviders:  离散加密法, 简单来说就是把你的信息保存到内存中后用一个离散值表示并返回给程序,这样在程序中只能看到离 ...

  4. 黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block

    企业库日志应用程序模块工作原理图:   从上图我们可以看清楚企业库日志应用程序模块的工作原理,其中LogFilter,Trace Source,Trace Listener,Log Formatter ...

  5. 黄聪:Microsoft Enterprise Library 5.0 系列教程(九) Policy Injection Application Block

    代理对象(Proxy Object)会通过Handler链定位到真实对象(Real Object),而Policy则被注入到代理对象和真实对象中.整个流程如图: 我个人对Policy Injectio ...

  6. Microsoft Enterprise Library 5.0 系列(五) Data Access Application Block

    企业库数据库访问模块通过抽象工厂模式,允许用户通过简单的配置选择不同的数据库作为程序的数据源,大大解决了切换数据库时带来的麻烦.因为我本机只安装了SQL Server 2005,所以在此只做SQL的演 ...

  7. Microsoft Enterprise Library 5.0 系列(二) Cryptography Application Block (初级)

    企业库加密应用程序模块提供了2种方式让用户保护自己的数据: Hashingproviders:  离散加密法, 简单来说就是把你的信息保存到内存中后用一个离散值表示并返回给程序,这样在程序中只能看到离 ...

  8. Microsoft Enterprise Library 5.0 系列(十) Configuration Application Block

    到目前为止,我们使用的模块都是在同一个配置文件中,这显然是不灵活的,我们希望每个功能模块能独立的在一个配置文件中体现,这样不仅易于管理,易于扩展,也易于阅读和分类.企业库当然考虑到了这个问题并且提供了 ...

  9. Microsoft Enterprise Library 5.0 系列(四) Logging Application Block

    企业库日志应用程序模块工作原理图: 从上图我们可以看清楚企业库日志应用程序模块的工作原理,其中LogFilter,Trace Source,Trace Listener,Log Formatter的信 ...

最新文章

  1. r语言ggplot怎么把多个维度数据合并在一个图中表示_R语言作图——Histogram
  2. 服务器不显示磁盘柜,磁盘柜与服务器的关系
  3. 计算机视觉与深度学习 | 基于多源传感器数据融合的动态场景SLAM研究
  4. 阅读笔记16-架构师推荐:提高90%开发效率的工具推荐
  5. Semaphore1.8源码
  6. C++ 练习题(一:布尔表达式与真值表图文详解)
  7. PATHLOSS.4.0 无线电设计软件
  8. DSPTMS320C6678的数据导入方法
  9. PPT文件太大了怎么压缩
  10. notejs 视频教程 智能社
  11. 二项分布 (Binomial Distribution)
  12. 微信公众平台编辑器可收藏、使用模版了
  13. win10 设备管理器显示便捷设备
  14. 永不过时的优雅 KOREANO ESSENTIAL 2022秋冬系列全新上市
  15. Ubuntu 20.04 修改笔记本亮度
  16. IDA动态调试so 指南
  17. oracle 存储过程语法
  18. 龙芯2号处理器,龙芯2K1000芯片参数
  19. 腾讯游戏人生 android,腾讯游戏
  20. Caliburn.Micro学习笔记目录——li-peng

热门文章

  1. Android源码解析
  2. 2020年加密货币领域的5大做市商,都有谁?
  3. 泡泡玛特要用“故事”撑起自己的新故事
  4. java计算机毕业设计采购物料质量检验系统源码+数据库+系统+lw文档+部署
  5. 常见远程控制协议及漏洞总结
  6. WGCLOUD运维监控系统邮件告警配置说明
  7. java jni释放_JNI 资源释放
  8. vs2010中c#中类库dll制作和引用方法
  9. 2、camunda工作流介绍
  10. pppoe工作原理详解