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


            牛腩新闻发布系统,在看视频的过程中,是根据视频进行一步步的编写优化的,现在到了添加存储过程的时候,当然在我们进行机房重构的时候就已经用过存储过程了,但究其说,存储过程和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)