sqlhelper重构

一、前言

       之前机房重构的时候用到了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;
        }
    }

四、结语

       慢慢的越来越体会到学习是一个过程,我们不断的解决问题,不断的积累,不断的思考,然后自己可以有意外的收获。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 28
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值