日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

牛腩——SQLhelper

發(fā)布時(shí)間:2023/12/20 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛腩——SQLhelper 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言


機(jī)房重構(gòu)的時(shí)候用到了sqlhelper,現(xiàn)在學(xué)習(xí)牛腩又重新接觸到了sqlhelper。機(jī)房的時(shí)候知道slqherlper要寫(xiě)4個(gè)方法,一個(gè)查詢(xún)的,一個(gè)增刪改的,這兩個(gè)都分帶參數(shù)和不帶參數(shù)兩種情況。但是沒(méi)有想過(guò)為什么每個(gè)方法要傳一個(gè)string類(lèi)型的語(yǔ)句,一個(gè)類(lèi)型,和參數(shù)。這次牛腩老師展示了sqlhelper從初級(jí)到一步步重構(gòu)成完美助手類(lèi)的過(guò)程。

Step 1: SQL and Connection


其實(shí)sqlhelper就是把D層每個(gè)方法都要連接數(shù)據(jù)庫(kù),到數(shù)據(jù)庫(kù)里執(zhí)行增刪查改的基礎(chǔ)操作給抽象出一個(gè)類(lèi)。符合面向?qū)ο蟮乃枷搿?

能使sql運(yùn)行起來(lái)最基礎(chǔ),最簡(jiǎn)陋 ,最本質(zhì)的東西就是建好connection連接并打開(kāi),寫(xiě)好sql語(yǔ)句,并把這兩個(gè)東西當(dāng)做參數(shù)傳給一個(gè)叫SqlCommand的鬼東西。

string connstr = @"server = bonie\sqlexpress;database = NewsSystem; uid = sa; pwd = summer";SqlConnection conn = new SqlConnection(connstr);conn.Open();SqlCommand cmd = new SqlCommand(sql, conn);res = cmd.ExecuteNonQuery();這里寫(xiě)代碼片

Step 2: 改造Connection

把Connection寫(xiě)到構(gòu)造函數(shù)里


sqlhelper里的四個(gè)方法都要?jiǎng)?chuàng)建connetion連接并打開(kāi)。在vb.net中可以把這些公共用到的東西寫(xiě)到類(lèi)的最開(kāi)始,在C#里讓類(lèi)初始化的時(shí)候就執(zhí)行的東西需要寫(xiě)到構(gòu)造函數(shù)里。
把打開(kāi)connection寫(xiě)成一個(gè)方法,就像單例一樣,保證在connection沒(méi)有打開(kāi)的情況下打開(kāi)connection。

public class SQLHelper{//把方法都用到的連接,命令都寫(xiě)到構(gòu)造函數(shù)中private SqlConnection conn = null;private SqlCommand cmd = null;private SqlDataReader sdr = null;public SQLHelper(){string connstr = @"server = bonie\sqlexpress;database = NewsSystem; uid = sa; pwd = summer";SqlConnection conn = new SqlConnection(connstr);}//把創(chuàng)建打開(kāi)連接抽出來(lái)private SqlConnection GetConn(){if (conn.State == ConnectionState.Closed){conn.Open();}return conn;}public int ExecuteNonQuery(string cmdText, CommandType cmdType) {int res;try{using (SqlCommand cmd = new SqlCommand(cmdText, GetConn())){cmd.CommandType = cmdType;res = cmd.ExecuteNonQuery();}

加入配置文件


進(jìn)一步解耦,把connectionstring 寫(xiě)到web的config里面。

<configuration><add name ="connStr" connectionString ="server = bonie\sqlexpress;database = NewsSystem; uid = sa; pwd = summer"/> </configuration>

改過(guò)后的SQLhelper

public class SQLHelper{#region 構(gòu)造函數(shù)初始化命令字符串,并應(yīng)用配置文件//構(gòu)造函數(shù)初始化命令字符串,并應(yīng)用配置文件private SqlConnection conn = null;private SqlCommand cmd = null;private SqlDataReader sdr = null;public SQLHelper(){string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;SqlConnection conn = new SqlConnection(connStr);}

Step3: 改造sql


之前傳入這四個(gè)方法的就是一個(gè)sql語(yǔ)句。sql用拼接字符串容易造成sql注入,所以sql里要加入?yún)?shù)SQLParameter。此外,D層傳入不僅知識(shí)sql語(yǔ)句也可以是存儲(chǔ)過(guò)程,所以這四個(gè)方法還要加入一個(gè)參數(shù)就是commandtype。

#region 該方法執(zhí)行帶參數(shù)的增刪改命令內(nèi)容/// <summary>/// 該方法執(zhí)行帶參數(shù)的增刪改命令內(nèi)容/// </summary>/// <param name="cmdText">增刪改命令內(nèi)容</param>/// <param name="cmdType">命令類(lèi)型</param>/// <param name="paras">參數(shù)集合</param>/// <returns>返回更新的記錄數(shù)</returns>public int ExecuteNonQuery(**string cmdText, CommandType cmdType, SqlParameter[] paras**){int res;try{using (cmd = new SqlCommand(cmdText, GetConn())){cmd.Parameters.AddRange(paras);cmd.CommandType = cmdType;res = cmd.ExecuteNonQuery();}}catch (Exception ex){throw ex;}finally{if (conn.State == ConnectionState.Open){conn.Close();}}return res;}#endregion

補(bǔ)充-關(guān)閉連接


除了上面的try catch 方法,在查詢(xún)方法中可以用using來(lái)關(guān)閉connection 。

//用using sdr執(zhí)行完會(huì)自動(dòng)釋放資源,并且連帶conn 也會(huì)關(guān)閉using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)){dt.Load(sdr);}return dt;}

小結(jié)


看了牛腩,像是觀(guān)看了丑小鴨變天鵝的一個(gè)過(guò)程。一開(kāi)始的代碼肯定是以實(shí)現(xiàn)主要功能為主,小鴨雖丑,五臟俱全;然后就是一步步的整容了,就變成白天鵝了。(總結(jié)出一條真理:重構(gòu)就是整容。)

總結(jié)

以上是生活随笔為你收集整理的牛腩——SQLhelper的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。