亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

編程也講禪,您讀過《金剛經》嗎?——ADO.NET

系統 2099 0

?

?

?

編程也講禪,您讀過《金剛經》嗎?——ADO.NET核心類的滅度與SQLHelper的誕生——十八相送(上)

無助的時候,我曾讀過N遍《金剛經》,講到《金剛經》,我必須把愛因斯坦先拿來當我的檔箭牌,不然,寫這么個題目,我可能會被拍死:

?

“如果世界上有一個宗教不但不與科學相違,而且每一次的科學新發現都能夠驗證她的觀點,這就是佛教。”《愛因斯坦文集》,第一卷。

?

“我不能設想真正的科學家會沒有這樣深摯的信仰。這情況可以用這樣一個形象來比喻:科學沒有宗教就象瘸子,宗教沒有科學就象瞎子。”------------《愛因斯坦文集》,第三卷,商務印書館,1979年,第182-183頁。

?

我還要提到我們國家,有位工科出身的領導人,我印象中,他也曾有段時間,每天都讀《金剛經》…

?

先引用一段吧:

?

所有一切眾生之類,若卵生、若胎生、若濕生、若化生、若有色、若無色、若有想、若無想、若非有想非無想,我皆令入無余涅槃而滅度之。如是滅度無量無數無邊眾生,實無眾生得滅度者。何以故?須菩提,若菩薩有我相、人相、眾生相、壽者相,即非菩薩。

?

類是眾生之類嗎?若化生??若無想??若非有想非無想??

?

我不是個無知無欲的佛教徒,寫這一段,我是非常非常傷感的,因為今天,我們就要把我們剛剛認識的,剛剛喜歡的,感覺已經有了很深的情感的幾個類,幾個象人一樣可愛的類,給“滅度”掉。

?

請原諒我的任性,我不知道用這個詞到底確切不確切,只是想這么用,就這么用了,原諒我的無知吧……

?

這幾個類,早已讓很多網友不耐煩了,它們是SqlConnection、SqlCommand、SqlDataReader…

讓我們,慢慢地,把它們送走吧……

?

《十八相送》是越劇《梁山伯與祝英臺》中的最精彩的片段,可惜,不會有多少人這么有耐心地傾聽那悠悠的、凄美的愛情了….

?

那么,我們簡化一下,分六步吧:

一相送,送到try…catch…finally結構中:

    using System; 
using System.Data; 
using System.Data.SqlClient; 
using System.Configuration; 
using System.Collections.Generic; 
using WestGarden.Model; 
  
namespace WestGarden.Web 
{ 
    public partial class Default1 : System.Web.UI.Page 
    { 
        protected void Page_Load(object sender, EventArgs e) 
        { 
            IList<CategoryInfo> catogories = new List<CategoryInfo>(); 
  
            string connectionString = ConfigurationManager.ConnectionStrings["NetShopConnString"].ConnectionString; 
            string cmdText = "SELECT CategoryId, Name, Descn FROM Category"; 
  
            SqlCommand cmd = new SqlCommand(); 
  
            SqlConnection conn = new SqlConnection(connectionString); 
  
            try
            { 
                cmd.Connection = conn; 
                cmd.CommandType = CommandType.Text; 
                cmd.CommandText = cmdText; 
  
                conn.Open(); 
  
                SqlDataReader rdr = cmd.ExecuteReader(); 
                while (rdr.Read()) 
                { 
                    CategoryInfo category = new CategoryInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2)); 
                    catogories.Add(category); 
                } 
                rdr.Close(); 
            } 
            finally
            { 
                conn.Close(); 
            } 
  
            ddlCategories.DataSource = catogories; 
            ddlCategories.DataTextField = "Name"; 
            ddlCategories.DataValueField = "CategoryId"; 
            ddlCategories.DataBind(); 
        } 
    } 
}

  

二相送,送到using()結構中:

    using System; 
using System.Data; 
using System.Data.SqlClient; 
using System.Configuration; 
using System.Collections.Generic; 
using WestGarden.Model; 
  
namespace WestGarden.Web 
{ 
    public partial class Default2 : System.Web.UI.Page 
    { 
        protected void Page_Load(object sender, EventArgs e) 
        { 
            IList<CategoryInfo> catogories = new List<CategoryInfo>(); 
  
            string connectionString = ConfigurationManager.ConnectionStrings["NetShopConnString"].ConnectionString; 
            string cmdText = "SELECT CategoryId, Name, Descn FROM Category"; 
  
            SqlCommand cmd = new SqlCommand(); 
  
            //簡單地說,using()結構等同于前面的try...finally結構,隱式關閉了conn。 
            using(SqlConnection conn = new SqlConnection(connectionString)) 
            { 
                cmd.Connection = conn; 
                cmd.CommandType = CommandType.Text; 
                cmd.CommandText = cmdText; 
  
                conn.Open(); 
  
                SqlDataReader rdr = cmd.ExecuteReader(); 
                while (rdr.Read()) 
                { 
                    CategoryInfo category = new CategoryInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2)); 
                    catogories.Add(category); 
                } 
                rdr.Close(); 
            } 
  
            ddlCategories.DataSource = catogories; 
            ddlCategories.DataTextField = "Name"; 
            ddlCategories.DataValueField = "CategoryId"; 
            ddlCategories.DataBind(); 
        } 
    } 
}
  


三相送,送到通用的數據庫訪問函數中:

    using System; 
using System.Data; 
using System.Data.SqlClient; 
using System.Configuration; 
using System.Collections.Generic; 
using WestGarden.Model; 
  
namespace WestGarden.Web 
{ 
    public partial class Default3 : System.Web.UI.Page 
    { 
        protected void Page_Load(object sender, EventArgs e) 
        { 
            IList<CategoryInfo> catogories = new List<CategoryInfo>(); 
  
            string connectionString = ConfigurationManager.ConnectionStrings["NetShopConnString"].ConnectionString; 
            string cmdText = "SELECT CategoryId, Name, Descn FROM Category"; 
  
            SqlDataReader rdr = ExecuteReader(connectionString, CommandType.Text, cmdText); 
  
            while (rdr.Read()) 
            { 
                CategoryInfo category = new CategoryInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2)); 
                catogories.Add(category); 
            } 
            rdr.Close(); 
  
            ddlCategories.DataSource = catogories; 
            ddlCategories.DataTextField = "Name"; 
            ddlCategories.DataValueField = "CategoryId"; 
            ddlCategories.DataBind(); 
        } 
  
        public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText) 
        { 
            SqlCommand cmd = new SqlCommand(); 
  
            SqlConnection conn = new SqlConnection(connectionString); 
  
            try
            { 
                cmd.Connection = conn; 
                cmd.CommandType = cmdType; 
                cmd.CommandText = cmdText; 
  
                conn.Open(); 
                  
                //如果創建了 SqlDataReader 并將 CommandBehavior 設置為 CloseConnection, 
                //則關閉 SqlDataReader 會自動關閉此連接 
                SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
                return rdr; 
            } 
            catch
            { 
                conn.Close(); 
                throw; 
            } 
            //finally 
            //{ 
            //    conn.Close(); 
            //} 
        } 
    } 
}

  

這個通用數據庫訪問函數可以進一步完善如下:

    using System.Data; 
using System.Data.SqlClient; 
using System.Configuration; 
using System.Collections.Generic; 
using WestGarden.Model; 
  
namespace WestGarden.Web 
{ 
    public partial class Default4 : System.Web.UI.Page 
    { 
        protected void Page_Load(object sender, EventArgs e) 
        { 
            IList<CategoryInfo> catogories = new List<CategoryInfo>(); 
  
            string connectionString = ConfigurationManager.ConnectionStrings["NetShopConnString"].ConnectionString; 
            string cmdText = "SELECT CategoryId, Name, Descn FROM Category"; 
  
            SqlDataReader rdr = ExecuteReader(connectionString, CommandType.Text, cmdText,null); 
  
            while (rdr.Read()) 
            { 
                CategoryInfo category = new CategoryInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2)); 
                catogories.Add(category); 
            } 
            rdr.Close(); 
  
            ddlCategories.DataSource = catogories; 
            ddlCategories.DataTextField = "Name"; 
            ddlCategories.DataValueField = "CategoryId"; 
            ddlCategories.DataBind(); 
        } 
  
        public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 
        { 
            SqlCommand cmd = new SqlCommand(); 
            SqlConnection conn = new SqlConnection(connectionString); 
  
            try
            { 
                //cmd.Connection = conn; 
                //cmd.CommandType = cmdType; 
                //cmd.CommandText = cmdText; 
                  
                //conn.Open(); 
  
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); 
  
                //如果創建了 SqlDataReader 并將 CommandBehavior 設置為 CloseConnection, 
                //則關閉 SqlDataReader 會自動關閉此連接。 
                SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
                cmd.Parameters.Clear(); 
                return rdr; 
            } 
            catch
            { 
                conn.Close(); 
                throw; 
            } 
            //finally 
            //{ 
            //    conn.Close(); 
            //} 
        } 
  
        private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) 
        { 
  
            if (conn.State != ConnectionState.Open) 
                conn.Open(); 
  
            cmd.Connection = conn; 
            cmd.CommandText = cmdText; 
  
            if (trans != null) 
                cmd.Transaction = trans; 
  
            cmd.CommandType = cmdType; 
  
            if (cmdParms != null) 
            { 
                foreach (SqlParameter parm in cmdParms) 
                    cmd.Parameters.Add(parm); 
            } 
        } 
    } 
}

  

因為重點在過程,在結構,代碼都比較簡單,唯一值得一提的是SqlConnection的關閉問題,在最后比較完善的數據庫訪問函數中(這是SQLHelper中的源代碼),沒有使用using()結構,也沒有顯示關閉,主要原因是調用ExecuteReader方法時,使用了參數 CommandBehavior 并將其設置為 CloseConnection:

SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

根據MSDN的說法:如果創建了 SqlDataReader 并將 CommandBehavior 設置為 CloseConnection ,則關閉 SqlDataReader 會自動關閉此連接。

參考網址: http://msdn.microsoft.com/zh-cn/library/y6wy5a0f(v=vs.80).aspx

?

?更多文章請參閱博客 http://blog.csdn.com/yousuosi

?

編程也講禪,您讀過《金剛經》嗎?——ADO.NET核心類的滅度與SQLHelper的誕生——十八相送(上)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 伊人精品视频一区二区三区 | 四虎一级片 | 天堂精品视频 | 久久99精品这里精品3 | 91精品全国免费观看 | 在线免费观看国产精品 | 四虎高清在线精品免费观看 | 日韩一级黄色大片 | 欧美日本黄色片 | 免费观看欧美成人禁片 | 老王午夜69精品影院 | 色综合婷婷在线 | 中文国产成人精品久久久 | 99国产高清久久久久久网站 | 国产精品成人一区二区 | 在线欧美一级毛片免费观看 | 天天躁日日躁aaaaxxxx | 中文精品视频一区二区在线观看 | 国产99久9在线| 欧美日韩亚洲另类 | 色偷偷亚洲第一综合 | 亚洲一一在线 | 精品偷拍模特露出丝袜在线 | 久久国产国内精品对话对白 | 91精品自在拍精选久久 | 国产精品久久久久孕妇 | 国产精品九九视频 | 亚洲精品视频网 | 欧美麻豆久久久久久中文 | 黄色片网站在线观看 | 国产精品欧美韩国日本久久 | 亚洲最大激情中文字幕 | 高清视频一区 | 青青草免费在线视频 | 久久99爱视频 | 国产成人久久精品激情 | 精品久久久久久久中文字幕 | 日韩欧美一区二区三区不卡 | 亚洲免费色视频 | 天天干天天拍天天射天天添天天爱 | 亚洲精品国产经典一区二区 |