快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
;param name="commandText">存储过程名称或者T-SQL命令行<</param>
// <param name="commandParameters">执行命令所需的参数数组</param>
// <returns>返回通过执行命令所影响的行数</returns>
public static int ExecuteNonQuery(IDbTransaction trans, CommandType cmdType, string cmdText, params IDbDataParameter[] commandParameters)
{
IDbConnection conn = null;
if (trans == null)
{
conn = DbFactory.CreateDbConnection(ConnectionString);
}
else
{
conn = trans.Connection;
}
IDbCommand cmd = DbFactory.CreateDbCommand();
PrepareCommand(cmd, conn, trans, cmdType, cmdText, commandParameters);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
//=============================================================================================
public static int ExecuteNonQuery(IDbTransaction trans, CommandType cmdType, string cmdText)
{
IDbCommand cmd = DbFactory.CreateDbCommand();
PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, null);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
//=============================================================================================

上面都是对ExecuteNonQuery方法的重载,仅仅是参数有所变化,下面将第一个方法进行逐行的分析。

line 1:public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params IDbDataParameter[] commandParameters)

参数1: string connectionString => 数据库连接所需连接字符串

参数2: CommandType cmdType=> 执行命令的类型(存储过程或T-SQL,等等)

参数3: string cmdText=> 存储过程名称或者T-SQL命令行

参数4: params IDbDataParameter[] commandParameters=>执行命令所需的参数数组

line 2:IDbCommand cmd = DbFactory.CreateDbCommand();

这里通过DbFactory类创建IDbCommand接口的实现类对象,这里为什么使用IDbCommand接口呢,如果我们项目中使用的SqlServer数据库的时候,我们习惯这样创建:

SqlCommand cmd = new SqlCommand();
但是如果这个项目上线了一阵,客户突然说要换成Oracle数据库,那么所有写成SqlCommand的地方都要改成OracleCommand,但要改的并不仅仅这些,计划所有ADO.NET与数据库相关的,比如SqlConnection、SqlDataAdapter、SqlParameter、SqlTransaction等等全部都要改,这工作量是很大的,还不说改动这么多会出现什么问题,所以我们可以通过工厂模式,采用面向接口编程来解决这个问题!

下面我们看看DbFactory是如何工作的,代码块1-2:

// <summary>
// 根据配置文件中所配置的数据库类型
// 来创建相应数据库命令对象
// </summary>
// <returns></returns>
public static IDbCommand CreateDbCommand()
{
IDbCommand cmd = null;
switch (AdoHelper.DbType)
{
case DatabaseType.SQLSERVER:
cmd = new SqlCommand();
break;
case DatabaseType.ORACLE:
cmd = new OracleCommand();
break;
case DatabaseType.ACCESS:
cmd = new OleDbCommand();
break;
default:
throw new Exception("数据库类型目前不支持!");
}
return cmd;
}

这是DbFactory类

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号