快速业务通道

自己动手写ASP.NET ORM框架(二):AdoHelper支持多数据库操作的封装(2)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
中的静态方法CreateDbCommand(),根据AdoHelper类中获取到配置文件配置的数据库类型DbType,来创建对应数据库类型的Command对象,通过反编译System.Data.dll,我们可以知道SqlCommand、OracleCommand、OleDbCommand等等Command都实现了IDbCommand接口,这样我们将创建好的对象以IDbCommand接口类型返回即可。

line 3:using (IDbConnection conn = DbFactory.CreateDbConnection(connectionString))

根据数据库连接字符串connectionString,通过DbFactory.CreateDbConnection方法创建数据库连接对象,这里同样使用到了接口IDbConnection ,好处多多就不在此罗嗦了。

line 4:PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);

这里是将所有cmd对象所需的参数都传入PrepareCommand方法中,将参数给cmd对象,为执行数据操作做好准备工作,具体实现看代码块1-3:

// <summary>
// 为即将执行准备一个命令
// </summary>
// <param name="cmd">SqlCommand对象</param>
// <param name="conn">SqlConnection对象</param>
// <param name="trans">IDbTransaction对象</param>
// <param name="cmdType">执行命令的类型(存储过程或T-SQL,等等)</param>
// <param name="cmdText">存储过程名称或者T-SQL命令行, e.g. Select * from Products</param>
// <param name="cmdParms">SqlParameters to use in the command</param>
private static void PrepareCommand(IDbCommand cmd, IDbConnection conn, IDbTransaction trans, CommandType cmdType, string cmdText, IDbDataParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = cmdType;
if (cmdParms != null)
{
foreach (IDbDataParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}

这里代码主要实现了将打开后的数据库连接对象conn、SQL语句cmdText、事物对象trans、执行命令的类型cmdType、以及命令参数cmdParms全部赋给cmd对象,为执行数据操作作准备。

line 5、6、7:

int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;

这里是cmd对象执行命令、清除cmd对象中的参数、返回执行操作后所影响的行数。

分析完这个方法后,其它的方法都是大同小异,也无需再进行分析了,这里主要的重点就是采用接口编程,DbFactory是重点,这样用的好处我们能看得到,我们不需要在更换数据库类型的时候去更改任何代码,仅仅只需在web.config中将数据库类型dbType更改,除非你的数据库类型在DbFactory中不支持,即便不支持,也只需在DbFactory中添加少量的几行代码!

至此,ExecuteNonQuery方法已经分析完成,后续还会继续分析AdoHelper类中的其它方法。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号