前言
大家都知道在我们的三层或者使用到数据库的时候,通常都会使用到一个SQLHelper的类。起初在刚开始重构机
房收费系统的时候,就是在遇到相同的代码的时候就想起来去抽象成类。这里想跟大家分享一个这个我起码是现在遇
到的堪称完美的SQLHelper类了。
要点
1.构造函数的使用
构造函数的使用来定义公共的数据库连接对象。
2.重载
重载的使用使得可以用的统一的方法来处理只是不同类型的数据。
3.方法
尽管这些只是简单的方法,但是这些方法的使用让你使这个类看起来是如此的干净、毫无赘余感。真正体现
了代码的复用啊!
代码
/* * 创建人:陈方林 * 创建时间:2013-6-12 14:55 * 说明:SQL Helper类 * 版权所有:******* */ using System; using System.Collections.Generic; using System.Linq; using System.Text; //导入所需命名空间 using System.Data; using System.Data.SqlClient; using System.Configuration; namespace DAL { public class SQLHelper { //通过构造函数来实例化所需的ADO对象 private SqlConnection sqlconn = null; private SqlCommand sqlcmd = null; private SqlDataReader sdr = null; /// <summary> /// 将连接数据对象封装到构造函数中 /// </summary> public SQLHelper () { //连接数据库的字符串(配置文件的使用) String connStr = ConfigurationManager .ConnectionStrings["connStr"].ToString (); //连接数据库对象 sqlconn = new SqlConnection(connStr); } /// <summary> /// 得到连接数据库对象,抽象连接的过程 /// </summary> /// <returns>返回一个连接数据对象</returns> private SqlConnection GetConn() { //判断现行数据库连接状态来判断是否执行数据连接 if (sqlconn.State == ConnectionState.Closed) { sqlconn.Open(); } return sqlconn; } /// <summary> /// 执行传入增 删 改的SQL语句与参数组 /// </summary> /// <param name="strsql">传入增 删 改 SQL语句</param> /// <param name="paras">传入的参数数组</param> /// <param name="cmdtype">命令类型</param> /// <returns>返回受影响的行数</returns> public int ExecuteNonQuery(string strsql, SqlParameter[] paras, CommandType cmdtype) { //定义int类型的变量 int res; //using语句执行SQL语句 using (sqlcmd=new SqlCommand (strsql,GetConn ())) { sqlcmd.CommandType = cmdtype; sqlcmd.Parameters.AddRange (paras); res =sqlcmd.ExecuteNonQuery (); } return res; } /// <summary> /// 该方法执行传入sql语句 /// </summary> /// <param name="sql">传入的SQL语句</param> /// <param name="cmdtype">执行的命令类型</param> /// <returns>返回执行的记录行数</returns> public int ExecuteNonQuery (string sql ,CommandType cmdtype ) { //定义存储返回行数的变量 int res ; //try catch语句实施查询并在查询结束后,关闭数据库连接 try { //将SQL语句与连接对象传入执行查询对象 sqlcmd = new SqlCommand(sql, GetConn ()); //执行查询的数据库操作类别 sqlcmd.CommandType = cmdtype; //执行查询 sqlcmd.ExecuteNonQuery(); //返回查询结果 res = sqlcmd.ExecuteNonQuery(); return res; } catch (Exception ex) { throw ex; } finally { //判断现行数据连接状态来改变数据库状态 if (sqlconn.State == ConnectionState.Open) { sqlconn.Close(); } } } /// <summary> /// 该方法执行传入的SQL语句 /// </summary> /// <param name="cmdtext">传入的SQL语句或者需要执行的存储过程</param> /// <param name="cmdtype">执行的命令类型</param> /// <returns>返回DataTable类型的数据</returns> public DataTable ExecuteQuery(string cmdtext,CommandType cmdtype) { //实例化datatable对象 DataTable dt = new DataTable(); //传入需要执行的SQL语句与连接数据库对象 sqlcmd = new SqlCommand(cmdtext , GetConn()); //定义执行的类型 sqlcmd.CommandType = cmdtype; using (sdr=sqlcmd.ExecuteReader (CommandBehavior .CloseConnection )) { //将查询结果加载到dt对象中 dt.Load(sdr); } //返回查询结果 return dt; } /// <summary> /// 执行传入的SQL语句及参数组 /// </summary> /// <param name="sql">传入的SQL语句</param> /// <param name="paras">参数数组</param> /// <param name="cmdtype">执行的命令类型</param> /// <returns></returns> public DataTable ExecuteQuery(string sql,SqlParameter [] paras,CommandType cmdtype) { //实例化datatable对象 DataTable dt = new DataTable(); //实例化数据库执行对象 SqlCommand sqlcmd = new SqlCommand(); //需要执行数据库操作的类别 sqlcmd.CommandType = cmdtype; //执行SQL语句 //sqlcmd = new SqlCommand(sql, GetConn ()); sqlcmd.Connection = GetConn(); sqlcmd.CommandText = sql; //传入parameter参数组 sqlcmd.Parameters.AddRange(paras); //使用using来实现数据库的关闭与打开 using (sdr=sqlcmd.ExecuteReader (CommandBehavior .CloseConnection )) { //将查询结果加载到dt对象中 dt.Load(sdr); } //返回查询结果 return dt; } } }