您的位置:首页 > 数据库

【牛腩新闻发布系统】——添加存储过程后重构SQLHelper

2015-05-26 10:29 260 查看
            牛腩新闻发布系统,在看视频的过程中,是根据视频进行一步步的编写优化的,现在到了添加存储过程的时候,当然在我们进行机房重构的时候就已经用过存储过程了,但究其说,存储过程和SQLHelper究竟是怎样联合使用的,当时是不清楚的,今天看到这一部分,就对其做一个过程的总结。

    存储过程

      在这儿存储过程内容还不是很多,有视频中如此详细的解说,我们也很容易明白是什么意思,如下:
ALTER PROCEDURE [dbo].[procNewsSeleteNewNews]

AS
BEGIN
select top 10 n.id,n.title ,n.createTime ,c.[name] from news n
inner join category c on n.caId=c.id
order by n.createTime desc
END

    应用

      因为有了存储过程,那我们就要将其应用到我们的程序中,先看看在D层的SQLHelper中我们是如何添加语句来引用的呢?
public DataTable test(string procName)
{
DataTable dt = new DataTable();
cmd = new SqlCommand(procName, GetConn());
cmd.CommandType  = CommandType.StoredProcedure;
using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
dt.Load(sdr);
}
return dt;
}


             在D层应用之后,我们再在U层绑定传入:
GridView1.DataSource = new SQLHelper().test("procNewsSeleteNewNews");
GridView1.DataBind();

     

    优化合并

      经过观察我们可以发现,在D层的这段代码和SQLHelper中不带参数的SQL查询语句极其相似:
/// <summary>
/// 该方法执行传入的SQL查询语句
/// </summary>
/// <param name="sql">SQL查询语句</param>
/// <returns></returns>
public DataTable ExecuteQuery(string sql)
{
DataTable dt = new DataTable();
cmd = new SqlCommand(sql, GetConn());
cmd.CommandType = CommandType.Text;
using (sdr =cmd .ExecuteReader (CommandBehavior .CloseConnection ))
{
dt.Load(sdr);
}
//sdr = cmd.ExecuteReader();
//dt.Load(sdr);
//sdr.Close();
//conn.Close();
return dt;
}

      对于这种现象,是绝对不符合我们的代码原则的。我们该如何改善呢?既然两部分内容基本上都一样,那一定可以把他们合成一部分的,那我们又该如何改善,如何合并呢?
      首先这两段代码仅仅是有一句不同,而且只有这一句的后半句不同,我们采用传参的方式,将代码来简化,下面是我们把两段代码整理之后的内容:
/// <summary>
/// 执行SQL查询语句或者存储过程
/// </summary>
/// <param name="cmdText">SQL查询语句或者存储过程</param>
/// <param name="ct">命令类型</param>
/// <returns></returns>
public DataTable ExecuteQuery(string cmdText, CommandType ct)
{
DataTable dt = new DataTable();
cmd = new SqlCommand(cmdText, GetConn());
cmd.CommandType = ct;
using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
dt.Load(sdr);
}
//sdr = cmd.ExecuteReader();
//dt.Load(sdr);
//sdr.Close();
//conn.Close();
return dt;
}


          根据这个方法,我们再对有参和无参的增删改查语句进行相同的改进,我们就把代码完善了一大部分了。这样不仅节省了代码量,还节省了时间。

    这只是牛腩新闻发布系统学习过程中收获的冰山一角,之后的内容一定还会有更多更深入的内容需要我们学习,虽然是跟着视频一步步的往前进,但相对于之前看过的视频,那差距可真不是一星半点,期待后面的学习能够有更多的收获!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  存储过程 SQLHelper