您的位置:首页 > 数据库

sqlhelper重构

2017-03-05 23:51 106 查看
一前言

二不断重构的sqlhelper
1sqlhelper初面貌

2sqlhelper重构

四结语

一、前言

之前机房重构的时候用到了sqlhelper,当时自己准备sqlhelper可谓是有点丈二的和尚,还好这次看牛腩的视频,发现sqlhelper并不是那样的复杂,自己对它也多了些喜爱。

二、不断重构的sqlhelper

对于sqlhelper,我想起了当时学生信息系统时候写的一个封装查询的方法,这里的sqlhelper也可以理解为这个作用。

我们可以将sqlhelper分为两个大类,查询和增删改,为啥这样分,一般增删改我们是返回int,或是bool;如果是查询我们常常是返回datatable,以便将要查询的信息显示出来。

不过在这个基础上,还可以再细分,查询可以有带参数的查询和不带参数的查询,修改有带参数的修改和不带参数的修改。根据自己的需要而定吧。

2.1sqlhelper初面貌

之前一直不知道,sqlhelper是怎么来的,通过看视频发现自己也有了一个系统的认识,感觉很棒~最开始的sqlhelper是这样的,以下是不带参数的查询和增删改。

/// <summary>
/// 该方法执行传入的增删改sql语句
/// </summary>
/// <param name="sql">要执行的增删改sql语句</param>
/// <returns>返回更新的记录数</returns>
public int ExecuteNonQuery(string sql)
{
string connStr = "server = viola; database =newssystem;uid =sa;pwd=123456";
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
int res = cmd.ExecuteNonQuery();
conn.Close();
return res;

}


/// <summary>
/// 该方法执行传入的sql查询语句
/// </summary>
/// <param name="sql">sql查询语句</param>
/// <returns></returns>
public DataTable ExecuteQuery(string sql)
{
DataTable dt = new DataTable();
string connStr = "server = viola; database =newssystem;uid =sa;pwd=123456";
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);

//数据要先装入reader
SqlDataReader sqlReader = cmd.ExecuteReader();
//Reader要装入dt中
dt.Load(sqlReader);
//关闭reader
sqlReader.Close();

conn.Close();
return dt;
}


2.2sqlhelper重构

我们发现,上面的sqlhelper不是太好,好多重复的东西都在写,比如连接的语句,连接的打开和关闭,每一次都要声明的cmd和reader。怎么办呢?我们可以把重复的东西,提出来放在构造函数中去,这样实例化的时候就有了~

public class SQLHelper
{
private SqlConnection conn = null;
private SqlCommand cmd = null;
private SqlDataReader sdr = null;
public SQLHelper()
{

string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
conn = new SqlConnection(connStr);
}

private SqlConnection GetConn()
{
if (conn.State == (ConnectionState.Closed))
{
conn.Open();
}
return conn;
}

/// <summary>
/// 该方法执行传入sql的增删改语句
/// </summary>
/// <param name="sql">要执行的增删改sql语句</param>
/// <returns>返回更新的记录数</returns>
public int ExecuteNonQuery(string sql)
{

int res;
try
{
cmd = new SqlCommand(sql, GetConn());
res = cmd.ExecuteNonQuery();
}
catch (Exception ex)
{

throw ex;
}
finally
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}

}
return res;
}

/// <summary>
/// 该方法执行传入的sql查询语句
/// </summary>
/// <param name="sql">sql查询语句</param>
/// <returns></returns>
public DataTable ExecuteQuery(string sql)
{
DataTable dt = new DataTable();
cmd = new SqlCommand(sql, GetConn());

//数据要先装入reader
using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) //using是()中内容用完后会直接关闭,commandbehavior.closeconnection是关闭reader后关联关闭connection
{

dt.Load(sdr);
}

return dt;
}

/// <summary>
/// 执行带参数的sql增删改语句
/// </summary>
/// <param name="sql">sql增删改语句</param>
/// <param name="paras">参数集合</param>
/// <returns></returns>
public int ExecuteNonQuery(string sql, SqlParameter[] paras)
{

int res;

using (cmd = new SqlCommand(sql, GetConn()))
{
cmd.Parameters.AddRange(paras);
res = cmd.ExecuteNonQuery();
}

return res;
}

/// <summary>
/// 执行带参数的的sql语句查询
/// </summary>
/// <param name="sql">传入的的sql语句</param>
/// <param name="paras">传入的参数</param>
/// <returns></returns>
public DataTable ExecuteQuery(string sql, SqlParameter[] paras)
{
DataTable dt = new DataTable();
cmd = new SqlCommand(sql, GetConn());
cmd.Parameters.AddRange(paras);
using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) //using是()中内容用完后会直接关闭,commandbehavior.closeconnection是关闭reader后关联关闭connection
{
dt.Load(sdr);
}
return dt;
}
}


四、结语

慢慢的越来越体会到学习是一个过程,我们不断的解决问题,不断的积累,不断的思考,然后自己可以有意外的收获。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sqlhelper c#