久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

ASP.NET系統(tǒng)開(kāi)發(fā)(一):層層遞進(jìn)之SQLHelper助手類的持續(xù)優(yōu)化

 悟靜 2012-11-11

ASP.NET開(kāi)發(fā)中的三層開(kāi)發(fā)思想指的是UI層(界面顯示層),,BLL層(業(yè)務(wù)邏輯層),,DAL層(數(shù)據(jù)訪問(wèn)層)三層,三層之間通過(guò)函數(shù)的調(diào)用來(lái)達(dá)到降低耦合,,易于系統(tǒng)維護(hù)的目的,,SQLHelper助手類的主要作用在于接收并執(zhí)行來(lái)自各個(gè)數(shù)據(jù)表累傳來(lái)的sql語(yǔ)句或存儲(chǔ)過(guò)程。一般的SQLHelper類中主要包括以下幾個(gè)函數(shù)功能:

      

        1.執(zhí)行不帶參數(shù)的增刪改方法

       2.執(zhí)行帶參數(shù)的增刪改方法,。

        3.執(zhí)行不帶參數(shù)的查詢方法,。

       4.執(zhí)行帶參數(shù)的查詢方法,。

 

作為一個(gè)程序員SQLHelper類編寫(xiě)的好壞不僅影響著系統(tǒng)的可維護(hù)性的強(qiáng)弱,而且它更體現(xiàn)的是一個(gè)編程人員的職業(yè)素質(zhì),。一個(gè)程序員的成長(zhǎng)過(guò)程中必然要經(jīng)過(guò)代碼的錘煉,,代碼見(jiàn)證了一個(gè)編程人員的成長(zhǎng)歷程,下面通過(guò)不同版本的SQLHelper類來(lái)向大家展示一個(gè)良好的SQLHelper助手類是怎樣煉成的:

 

一,、初涉江湖版(A級(jí)代碼)

 

[csharp] 
namespace dal 

    public class SQLHelper 
    { 
        /// 執(zhí)行帶參數(shù)的增刪改方法 
        public int ExecuteNonQuery(string sqltext,CommandType ct,SqlParameter [] paras) 
        { 
            string strconn ="server=YCH-PC;database=newssystem;uid=sa;pwd=1314517";               
            SqlConnection conn = new SqlConnection(strconn);                //定義一個(gè)數(shù)據(jù)庫(kù)連接對(duì)象(下同) 
            conn.Open();                                                   //打開(kāi)數(shù)據(jù)庫(kù)連接(下同) 
              SqlCommand cmd = new SqlCommand(sqltext  , conn );            //實(shí)例化一個(gè)命令對(duì)象(下同) 
              cmd.CommandType = ct;                                        //指定命令類型(下同) 
              cmd.Parameters.AddRange(paras);                             //增加參數(shù)(下同) 
              int res = cmd.ExecuteNonQuery();                           //執(zhí)行命令(下同) 
              conn .Close ();                                           //關(guān)閉數(shù)據(jù)庫(kù)連接(下同) 
              return res;                                              //返回執(zhí)行結(jié)果(下同) 
        } 
        /// 執(zhí)行不帶參數(shù)的增刪改方法 
        public int ExecuteNonQuery(string sqltext, CommandType ct) 
        { 
            string strconn = "server=YCH-PC;database=newssystem;uid=sa;pwd=123456"; 
            SqlConnection conn = new SqlConnection(strconn); 
            conn.Open(); 
            SqlCommand cmd = new SqlCommand(sqltext, conn); 
            cmd.CommandType = ct; 
            int res = cmd.ExecuteNonQuery(); 
            conn.Close(); 
            return res; 
        } 
        /// 執(zhí)行不帶參數(shù)的查詢方法 
        public DataTable  ExecuteQuery(string sqltext, CommandType ct) 
        { 
            string strconn = "server=YCH-PC;database=newssystem;uid=sa;pwd=123456"; 
            SqlConnection conn = new SqlConnection(strconn); 
            conn.Open(); 
            SqlDataReader sdr ; 
            DataTable dt=new DataTable (); 
            SqlCommand cmd = new SqlCommand(sqltext, conn); 
            cmd.CommandType = ct; 
            sdr = cmd.ExecuteReader(); 
            dt.Load(sdr); 
            conn.Close(); 
            return dt ; 
        } 
        /// 執(zhí)行帶參數(shù)的查詢操作 
        public DataTable  ExecuteQuery(string sqltext, CommandType ct, SqlParameter[] paras) 
        { 
            string strconn = "server=YCH-PC;database=newssystem;uid=sa;pwd=123456"; 
            SqlConnection conn = new SqlConnection(strconn); 
            conn.Open(); 
            SqlDataReader sdr; 
            DataTable dt = new DataTable(); 
            SqlCommand cmd = new SqlCommand(sqltext, conn); 
            cmd.CommandType = ct; 
            cmd.Parameters.AddRange(paras); 
            sdr  = cmd.ExecuteReader(); 
            dt.Load(sdr); 
            conn.Close(); 
            return dt ; 
        } 
    } 

 

二,、血雨腥風(fēng)版(AA級(jí)代碼)

 

從上面的代碼中我們可以很明顯的看出,各個(gè)函數(shù)中數(shù)據(jù)庫(kù)連接字符串,、連接對(duì)象以及數(shù)據(jù)庫(kù)連接的打開(kāi)和關(guān)閉都是相同的,,代碼的重復(fù)往往是糟糕代碼的標(biāo)志,下面我們就通過(guò)代碼改造來(lái)減少代碼冗余,,提高代碼的復(fù)用率,。代碼的主要改動(dòng)部分就是針對(duì)上述相同的代碼片段進(jìn)行的:

 

[csharp] 
namespace dal 

    public class SQLHelper 
    { 
        private SqlConnection conn = null;                                        
        private SqlCommand cmd = null; 
        /// 實(shí)例化SQLHelper類的時(shí)候便實(shí)例化一個(gè)數(shù)據(jù)庫(kù)連接 
        public SQLHelper() 
        { 
            string connStr = "server=YCH-PC;database=newssystem;uid=sa;pwd=123456"; 
            conn = new SqlConnection(connStr); 
        } 
        /// 打開(kāi)數(shù)據(jù)庫(kù)連接 
        private SqlConnection GetConn() 
        { 
            if (conn.State == ConnectionState.Closed) 
            { 
                conn.Open(); 
            } 
            return conn; 
        } 
        /// 關(guān)閉數(shù)據(jù)庫(kù)連接 
        private void OutConn() 
        { 
            if (conn.State == ConnectionState.Open) 
            { 
                conn.Close(); 
            } 
        } 
        /// 執(zhí)行不帶參數(shù)的增刪改操作 
        public int ExecuteNonQuery(string cmdText, CommandType ct) 
        { 
            cmd = new SqlCommand(cmdText, GetConn()); 
            cmd.CommandType = ct; 
            int res = cmd.ExecuteNonQuery(); 
            OutConn(); 
            return res; 
        } 
        /// 執(zhí)行帶參數(shù)的增刪改方法 
        public int ExecuteNonQuery(string sqltext, CommandType ct, SqlParameter[] paras) 
        { 
            SqlCommand cmd = new SqlCommand(sqltext, GetConn()); 
            cmd.CommandType = ct; 
            cmd.Parameters.AddRange(paras); 
            int res = cmd.ExecuteNonQuery(); 
            OutConn(); 
            return res; 
        } 
        /// 執(zhí)行不帶參數(shù)的查詢方法 
        public DataTable ExecuteQuery(string sqltext, CommandType ct) 
        { 
            DataTable dt = new DataTable(); 
            SqlCommand cmd = new SqlCommand(sqltext, GetConn()); 
            cmd.CommandType = ct; 
            SqlDataReader sdr = cmd.ExecuteReader(); 
            dt.Load(sdr); 
            sdr.Close(); 
            OutConn(); 
            return dt; 
        } 
         
       /// 執(zhí)行帶參數(shù)的查詢操作 
        public DataTable  ExecuteQuery(string sqltext, CommandType ct, SqlParameter[] paras) 
        { 
            DataTable dt = new DataTable(); 
            SqlCommand cmd = new SqlCommand(sqltext, GetConn()); 
            cmd.CommandType = ct; 
            cmd.Parameters.AddRange(paras); 
            SqlDataReader sdr  = cmd.ExecuteReader(); 
            dt.Load(sdr); 
            sdr.Close(); 
            OutConn(); 
            return dt ; 
        } 
    } 

 

三、爐火純青版(AAA級(jí)代碼)

通過(guò)”瘦身行動(dòng)“,,現(xiàn)在的代碼是不是比第一版代碼清晰了很多呢,?但這還不是最后的結(jié)果。有的人會(huì)提出這樣的問(wèn)題:把連接字符串寫(xiě)在SQLHelper類中,,如果我現(xiàn)在要更換數(shù)據(jù)庫(kù),,那豈不是要對(duì)SQLHelper助手類進(jìn)行更改,這樣似乎不符合我們”開(kāi)放擴(kuò)展,,關(guān)閉修改“的要求,。另外在執(zhí)行查詢過(guò)程時(shí)需要先關(guān)閉SqlDataReader再關(guān)閉數(shù)據(jù)庫(kù)連接,這樣在代碼中也出現(xiàn)了重復(fù),,能不能再進(jìn)一步對(duì)代碼進(jìn)行改造來(lái)解決這兩個(gè)問(wèn)題呢,?下面我們就上述兩個(gè)問(wèn)題對(duì)代碼進(jìn)行進(jìn)一的步改造: 解決更換數(shù)據(jù)庫(kù)的問(wèn)題我們采取的方法是將連接字符串寫(xiě)在配置文件中,具體步驟為:

1. 雙擊web層中Web.config文件,,配置文件中的相關(guān)內(nèi)容將會(huì)出現(xiàn),。
2. 找到<connectionStrings>和</connectionStrings>,在二者之間添加如下內(nèi)容:<add name=<add name=連接字符串 connectionString ="server=YCH-PC;database=newssystem;uid=sa;pwd=具體的登陸密碼"/>
3. 修改SQLHelper類中的相關(guān)代碼如下:

 

[csharp] 
namespace dal 

    public class SQLHelper 
    { 
        private SqlConnection conn = null; 
        private SqlCommand cmd = null; 
        private SqlDataReader sdr = null; 
        public SQLHelper() 
        { 
            string strconn = ConfigurationManager.ConnectionStrings["strconn"].ConnectionString; 
            conn = new SqlConnection(strconn ); 
        } 
  
        private SqlConnection GetConn() 
        { 
            if (conn.State == ConnectionState.Closed) 
            { 
                conn.Open(); 
            } 
            return conn; 
        } 
         
        //關(guān)閉數(shù)據(jù)庫(kù)連接 
        private void OutConn() 
        { 
            if (conn.State == ConnectionState.Open) 
            { 
                conn.Close(); 
            } 
        } 
        ///  執(zhí)行不帶參數(shù)的增刪改SQL語(yǔ)句或存儲(chǔ)過(guò)程 
        public int ExecuteNonQuery(string cmdText, CommandType ct) 
        { 
            int res; 
            try 
            { 
                cmd = new SqlCommand(cmdText, GetConn()); 
                cmd.CommandType = ct; 
                res = cmd.ExecuteNonQuery(); 
            } 
            catch (Exception ex) 
            { 
                throw ex; 
            } 
            finally 
            { 
                OutConn(); 
            } 
            return res; 
        } 
        ///  執(zhí)行帶參數(shù)的增刪改SQL語(yǔ)句或存儲(chǔ)過(guò)程 
        public int ExecuteNonQuery(string cmdText, SqlParameter[] paras, CommandType ct) 
        { 
            int res; 
            try 
            { 
                cmd = new SqlCommand(cmdText, GetConn()); 
                cmd.CommandType = ct; 
                cmd.Parameters.AddRange(paras); 
                res = cmd.ExecuteNonQuery(); 
            } 
            catch (Exception ex) 
            { 
                throw ex; 
            } 
            finally 
            { 
                OutConn(); 
            } 
            return res; 
        } 
  
        ///  執(zhí)行不帶參數(shù)的查詢SQL語(yǔ)句或存儲(chǔ)過(guò)程 
        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); 
            } 
            return dt; 
        } 
        ///  執(zhí)行帶參數(shù)的查詢SQL語(yǔ)句或存儲(chǔ)過(guò)程 
        public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct) 
        { 
            DataTable dt = new DataTable(); 
            cmd = new SqlCommand(cmdText, GetConn()); 
            cmd.CommandType = ct; 
            cmd.Parameters.AddRange(paras); 
            using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) 
            { 
                dt.Load(sdr); 
            } 
            return dt; 
        } 
    } 

經(jīng)過(guò)對(duì)代碼的再次改造,不但代碼的重復(fù)率大大降低,,而且如需更換數(shù)據(jù)庫(kù),,只要在配置文件中更改相應(yīng)的連接字符串就可完。在編寫(xiě)查詢(包括帶參數(shù)的和不帶參數(shù)的查詢方法)方法時(shí),,用using方法,,在關(guān)閉SqlDataReader對(duì)象的時(shí)候同時(shí)關(guān)閉與之相關(guān)聯(lián)的數(shù)據(jù)庫(kù)連接,避免了try catch語(yǔ)句的使用,,代碼更加簡(jiǎn)潔,。經(jīng)過(guò)三次改造,SQLHelper助手類的變身就此完成。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多