您的位置:首页 > 数据库

牛腩新闻发布系统笔记4:重构SQLHelper

2011-08-26 14:56 435 查看
重构前:

/// <summary>
/// 执行增删改SQL语句
/// </summary>
/// <param name="sql">SQL语句</param>
/// <returns>返回数据库中受影响的数据条数,以供以后使用(如果返回值大于0,则本函数执行成功,否则执行失败)</returns>
public int ExecuteNonQuery(string sql)
{
string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
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"></param>
/// <returns>返回查询出的数据表</returns>
/// 此处也可以用DataSet,但是一个DataSet中包含多个表,而我们只需要一个表,浪费了资源(杀鸡用牛刀)。此处用DataTable即可。
public DataTable ExecuteQuery(string sql)
{
DataTable dt = new DataTable();
string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
SqlCommand cmd = new SqlCommand(sql,conn);
SqlDataReader sdr = cmd.ExecuteReader();
//把查询出的数据加载到数据表中
dt.Load(sdr);
conn.Close();
return dt;

}


第一次重构:

private SqlConnection conn = null;
private SqlCommand cmd = null;
private SqlDataReader sdr = null;

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

public SqlConnection GetConn()
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
return conn;
}
/// <summary>
/// 执行增,删,改,SQL语句
/// </summary>
/// <param name="sql">SQL语句</param>
/// <returns>返回数据库中受影响的数据条数,以供以后使用(如果返回值大于0,则本函数执行成功,否则执行失败)</returns>
public int ExecuteNonQuery(string sql)
{
cmd = new SqlCommand(sql, GetConn());
int res = cmd.ExecuteNonQuery();
conn.Close();
return res;
}

/// <summary>
/// 执行SQL查询语句
/// </summary>
/// <param name="sql"></param>
/// <returns>返回查询出的数据表</returns>
/// 此处也可以用DataSet,但是一个DataSet中包含多个表,而我们只需要一个表,浪费了资源(杀鸡用牛刀)。此处用DataTable即可。
public DataTable ExecuteQuery(string sql)
{
DataTable dt = new DataTable();
cmd = new SqlCommand(sql, GetConn());
sdr = cmd.ExecuteReader();
//把查询出的数据加载到数据表中
dt.Load(sdr);
conn.Close();
return dt;

}

最后的重构:

private SqlConnection conn = null;
private SqlCommand cmd = null;
private SqlDataReader sdr = null;

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

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

/// <summary>
/// 执行增删改SQL语句
/// </summary>
/// <param name="sql">SQL语句</param>
/// <returns>返回数据库中受影响的数据条数,以供以后使用(如果返回值大于0,则本函数执行成功,否则执行失败)</returns>
public int ExecuteNonQuery(string sql)
{
int res;
try
{
cmd = new SqlCommand(sql, GetConn());
res = cmd.ExecuteNonQuery();
}
catch (Exception ex)
{

throw ex;
}
finally
{
conn.Close();
}

return res;
}

/// <summary>
/// 执行SQL查询语句
/// </summary>
/// <param name="sql"></param>
/// <returns>返回查询出的数据表</returns>
/// 此处也可以用DataSet,但是一个DataSet中包含多个表,而我们只需要一个表,浪费了资源(杀鸡用牛刀)。此处用DataTable即可。
public DataTable ExecuteQuery(string sql)
{
DataTable dt = new DataTable();
cmd = new SqlCommand(sql, GetConn());
//使用using语句,定义一个范围,作用和try..catch..finally相同,强制清理资源。CommandBehavior.CloseConnection作用:和conn.Close()相同。

using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
//把查询出的数据加载到数据表中
dt.Load(sdr);
}
return dt;

}

此时的CategoryDAO为:
//注意:此处开始时候是没有public的,所以在其他地方不能调用,加上public即可。
public class CategoryDAO
{
private SQLHelper sqlhelper = null;

public CategoryDAO()
{
sqlhelper = new SQLHelper();
}

/// <summary>
/// 取出当前所有新闻分类
/// </summary>
/// <returns></returns>
public DataTable SelectAll()
{
DataTable dt = new DataTable();
string sql = "select * from category";
dt = sqlhelper.ExecuteQuery(sql);
return dt;

}

/// <summary>
/// 增加类别
/// </summary>
/// <param name="caName">由前台表单传入值</param>
/// <returns></returns>
public bool Insert(string caName)
{
bool flag = false;
string sql = "insert into category(name) values('" + caName + "')";
int res = sqlhelper.ExecuteNonQuery(sql);
if (res > 0)
{
flag = true;
}
return flag;
}

// 修改类别
// 删除类别(连同其下的新闻及新闻评论一起删除)

/// <summary>
/// 判断类别名称是否已存在
/// </summary>
/// <param name="caName">类别名称</param>
/// <returns></returns>

public bool IsExist(string caName)
{
bool flag = false;
string sql = "select * from category where [name]='"+caName+"'";
DataTable dt = sqlhelper.ExecuteQuery(sql);

if (dt.Rows.Count > 0)
{
flag = true;
}
return flag;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息