牛腩新闻发布系统笔记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;
}
}
相关文章推荐
- 牛腩新闻发布系统笔记10:再次重构SQLHelper
- 牛腩新闻发布系统(二):SQLHelper重构(二)
- 牛腩新闻发布系统(二):SQLHelper重构(二)
- 【牛腩新闻发布系统】——添加存储过程后重构SQLHelper
- 牛腩新闻发布系统(一):SQLHelper重构(一)
- 牛腩新闻发布系统(一):SQLHelper重构(一)
- 【牛腩新闻发布系统】写SQlHelper
- 牛腩新闻发布系统笔记8:新闻评论操作类的实现
- 牛腩新闻发布系统 整合类别管理页 笔记 ajax的使用
- 牛腩新闻发布系统笔记6:SQL触发器:实现数据的联动删除
- 牛腩新闻发布系统笔记9:存储过程
- 牛腩新闻发布系统笔记11:存储过程的编写
- 牛腩新闻发布系统笔记5:防止SQL注入以及实体类的使用
- 牛腩新闻系统学习笔记-06讲 编写SQLHelper
- 牛腩新闻发布系统综合笔记(三)
- 牛腩新闻发布系统笔记7:类别表操作类的实现
- 新闻发布系统,SQLHelper重构
- 牛腩新闻发布系统综合笔记(二)
- 【牛腩新闻发布系统】一步步演化的SQLHelper
- 【牛腩新闻发布系统】网页发布问题梳理