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

企业库数据库访问模块通过抽象工厂模式 , 允许用户通过简单的配置选择不同的数据库作为程序的数据源 , 大大解决了切换数据库时带来的麻烦 . 因为我本机只安装了 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数据库:

test.jsp?url=http%3A%2F%2Fpic002.cnblogs.com%2Fimg%2Fsd7087003%2F201005%2F2010053123480138.jpg&refer=http%3A%2F%2Fwww.cnblogs.com%2Fhuangcong%2Farchive%2F2010%2F06%2F02%2F1748699.html

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

test.jsp?url=http%3A%2F%2Fpic002.cnblogs.com%2Fimg%2Fsd7087003%2F201005%2F2010053123484271.jpg&refer=http%3A%2F%2Fwww.cnblogs.com%2Fhuangcong%2Farchive%2F2010%2F06%2F02%2F1748699.html

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

test.jsp?url=http%3A%2F%2Fpic002.cnblogs.com%2Fimg%2Fsd7087003%2F201005%2F2010053123485895.jpg&refer=http%3A%2F%2Fwww.cnblogs.com%2Fhuangcong%2Farchive%2F2010%2F06%2F02%2F1748699.html

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());

}

}

f68f2add0b68e4f9810432fce46917b7.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值