1. 程式人生 > >C#中使用try catch和using如何提高程式碼質量

C#中使用try catch和using如何提高程式碼質量

簡介:
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;
        }