C#中使用try catch和using如何提高代码质量

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aimin_com/article/details/84146275

简介:
try catch我们之前说过是处理异常的,其实主要处理异常的是catch,而finally中是释放资源的,说白了using在C# 中也是让使用资源的对象释放资源的,无疑和finally差不多,所以使用起来using会更加的方便,接下来我们做一个对比:

对比trycatch:
trycatch类:第一段代码是原始代码,第二段是重构的trycatch代码


  /// <summary>
        /// 该方法执行传入则增删改的SQL语句
        /// </summary>
        /// <param name="sql">要执行的SQL语句</param>
        /// <returns>返回更新的记录数</returns>
        public int ExecuteNonQuery(string sql)
        {
        string connStr = @"Server=DESKTOP-OU60RPC\SQLSV; Database=newssystem;User ID=sa;Password=123456";
        SqlConnection conn = new SqlConnection(connStr);
        conn.Open();
        SqlCommand cmd=new SqlCommand(sql,conn);
        int res=cmd.ExecuteNonQuery();
        conn.Close();
        return res;
        }		

首先做三个私有的变量为空,下面的就不用再实例化了;其次制作一个自己的本类(SQLhelper)的构造函数方便下面的使用;最后在使用trycatch连接起来,这样看起来代码量并没有减少太多,虽然减少了耦合,但是看起来还增加了很多东西。

 		private SqlConnection conn = null;
        private SqlCommand cmd = null;
        private SqlDataReader sdr = null;
        public SQLHelper()  //构造函数,在下面就不用单独每个类写了
        {
            string connStr = @"Server=DESKTOP-OU60RPC\SQLSV; Database=newssystem;User ID=sa;Password=123456";
            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;
        }

对比using

接下来看我们的using用法:第一个是原始代码,第二个为重构的using方法使用:

 /// <summary>
        /// 该方法执行传入的SQL查询语句
        /// </summary>
        /// <param name="sql">SQL查询语句</param>
        /// <returns></returns>
        public DataTable ExecuteQuery(string sql)
        {
           DataTable dt = new DataTable();
       	   conn.Open();
           SqlCommand cmd = new SqlCommand(sql, conn);
           SqlDataReader sdr = cmd.ExecuteReader();
           dt.Load(sdr);
           sdr.Close();
           conn.Close();
           return dt;
        }

using代码的前面和上面trycatch使用的变量和构造函数一样,但是下面的代码从耦合上面还是简洁性都明显的提高了许多许多,并且using使用完毕后会回收using段内的内存,这样提高了很多的效率和性能。

private SqlConnection conn = null;
        private SqlCommand cmd = null;
        private SqlDataReader sdr = null;
        public SQLHelper()  //构造函数,在下面就不用单独每个类写了
        {
            string connStr = @"Server=DESKTOP-OU60RPC\SQLSV; Database=newssystem;User ID=sa;Password=123456";
            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 DataTable ExecuteQuery(string sql)
        {
            DataTable dt = new DataTable();                     
            conn.Open();
            cmd = new SqlCommand(sql, GetConn());
            using (sdr=cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                dt.Load(sdr);
            }          
            return dt;
        }

猜你喜欢

转载自blog.csdn.net/aimin_com/article/details/84146275