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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

牛腩——SQLhelper

發布時間:2023/12/20 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛腩——SQLhelper 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言


機房重構的時候用到了sqlhelper,現在學習牛腩又重新接觸到了sqlhelper。機房的時候知道slqherlper要寫4個方法,一個查詢的,一個增刪改的,這兩個都分帶參數和不帶參數兩種情況。但是沒有想過為什么每個方法要傳一個string類型的語句,一個類型,和參數。這次牛腩老師展示了sqlhelper從初級到一步步重構成完美助手類的過程。

Step 1: SQL and Connection


其實sqlhelper就是把D層每個方法都要連接數據庫,到數據庫里執行增刪查改的基礎操作給抽象出一個類。符合面向對象的思想。

能使sql運行起來最基礎,最簡陋 ,最本質的東西就是建好connection連接并打開,寫好sql語句,并把這兩個東西當做參數傳給一個叫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();這里寫代碼片

Step 2: 改造Connection

把Connection寫到構造函數里


sqlhelper里的四個方法都要創建connetion連接并打開。在vb.net中可以把這些公共用到的東西寫到類的最開始,在C#里讓類初始化的時候就執行的東西需要寫到構造函數里。
把打開connection寫成一個方法,就像單例一樣,保證在connection沒有打開的情況下打開connection。

public class SQLHelper{//把方法都用到的連接,命令都寫到構造函數中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);}//把創建打開連接抽出來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();}

加入配置文件


進一步解耦,把connectionstring 寫到web的config里面。

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

改過后的SQLhelper

public class SQLHelper{#region 構造函數初始化命令字符串,并應用配置文件//構造函數初始化命令字符串,并應用配置文件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


之前傳入這四個方法的就是一個sql語句。sql用拼接字符串容易造成sql注入,所以sql里要加入參數SQLParameter。此外,D層傳入不僅知識sql語句也可以是存儲過程,所以這四個方法還要加入一個參數就是commandtype。

#region 該方法執行帶參數的增刪改命令內容/// <summary>/// 該方法執行帶參數的增刪改命令內容/// </summary>/// <param name="cmdText">增刪改命令內容</param>/// <param name="cmdType">命令類型</param>/// <param name="paras">參數集合</param>/// <returns>返回更新的記錄數</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

補充-關閉連接


除了上面的try catch 方法,在查詢方法中可以用using來關閉connection 。

//用using sdr執行完會自動釋放資源,并且連帶conn 也會關閉using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)){dt.Load(sdr);}return dt;}

小結


看了牛腩,像是觀看了丑小鴨變天鵝的一個過程。一開始的代碼肯定是以實現主要功能為主,小鴨雖丑,五臟俱全;然后就是一步步的整容了,就變成白天鵝了。(總結出一條真理:重構就是整容。)

總結

以上是生活随笔為你收集整理的牛腩——SQLhelper的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。