前言
大家都知道在我们的三层或者使用到数据库的时候,通常都会使用到一个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;
}
}
}