牛腩新聞發布系統(一):SQLHelper重構(一)

導讀:在機房重構的時候,就用到了SQLHelper,但那時候即使把代碼反復看了很多遍,也看了注釋,還和同學交流,也依然是半懂不懂。現在,我再次用到了SQLhelper這個東西,就來說說SQLHelper是怎么構建的。

?

一、Why?(為什么用)

1,首先看普遍性的D層操作

<span style="font-size:18px;"><span style="font-size:24px;">/*********************************************** '類名:Class1* '命名空間:SQLHelper* '創建時間:2015/3/5 13:20:02* '創建人:HXX* '修改時間:* '修改人:* '版本號:4.0.30319.18449* '版權:HHX* '**********************************************/ 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; 
//增添了對數據庫的訪問操作,增添相應的命名空間 //提供對表示 ADO.NET 結構的類的訪問。包含的是一些數據庫操作所需要用到的普通數據,如數據表,數據行等
using System.Data; //為 SQL服務器.NET Framework 數據提供程序。包含有關專門操作SqlServer數據庫的類,如SqlConnection,SqlCommand,SqlDateAdapter等.
using System.Data.SqlClient; 
namespace SQLHelper
{    public class SQLHelper    {        public int ExecuteNonQuery()        {            //數據庫鏈接字符串            string connStr = @"server=(local);database=newssystem;uid=sa;pwd=123456";            //實例化SQLConnection,并通過字符串鏈接數據庫            SqlConnection conn = new SqlConnection(connStr);            //打開鏈接            conn.Open();           //執行的SQL語句           string sql = "insert into category(name)values('hhx')";            //實例化命令(執行SQL,在conn鏈接的數據庫里)            SqlCommand cmd = new SqlCommand(sql, conn);            //定義變量            int res = cmd.ExecuteNonQuery();            //關閉鏈接            conn.Close();            //返回執行更新行數            return res;        }  }
}
</span></span>

2,解釋說明

基本上,每次在D層對于數據庫操作,都要經歷這么一個階段:鏈接—打開—執行—關閉—返回。如果只有一個方法,一個類,那么寫一次是不要緊的,但如果有很多的話,就非常的累。這時候,就需要對于每次的數據庫操作進行抽象重構,以便于我們的D層更為輕便。

?

二、重構步驟

1,數據庫的鏈接

首先:每次的操作,都要進行數據庫鏈接,這個公共的特性,可以單寫出一個方法專門進行數據庫鏈接。

<span style="font-size:18px;"><span style="font-size:24px;"> /// <summary>/// 通過構造函數,給SQLHelper的屬性附初值/// </summary>public SQLHelper(){<span style="white-space:pre">	</span>string connStr = @"server=(local);database=newssystem;uid=sa;pwd=123456";<span style="white-space:pre">	</span>SqlConnection conn = new SqlConnection(connStr);}</span></span>


其次:在這里,就已經對于數據庫鏈接進行了初步的精簡。但通過定義變量的方式,又將數據的鏈接寫死在了程序里。所以,為了進一步解耦,需要引入配置文件,便于數據庫的更改。

注意:1,引用命名空間using?System.Configuration,2,配置文件在Web層里自行配置。

<span style="font-size:18px;"><span style="font-size:24px;"><span style="white-space:pre">	</span>public SQLHelper(){string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;conn = new SqlConnection(connStr);}</span></span>

2,打開關閉數據庫

在對數據庫進行鏈接之后,還需要打開它,在對其操作結束后,還要關閉。這是在每一次操作時,都需要用到的,所以,這個地方可以精簡。

<span style="font-size:18px;"><span style="font-size:24px;"><span style="white-space:pre">	</span>private SqlConnection GetConn(){//如果數據庫關閉,則打開if (conn.State == ConnectionState.Closed){conn.Open();}return conn;}</span></span>


三、精簡結果

每次執行的SQL語句,可以通過一個變量從D層傳入,所以在方法中,引入一個形參sql。

<span style="font-size:18px;"><span style="font-size:24px;">        /// 該方法執行傳入的SQL增刪改語句(無參)/// </summary>/// <param name="sql">要執行的SQL增刪改語句或存儲過程</param>/// <returns>返回更新的記錄數</returns>public int ExecuteNonQuery(string sql){int res;try{SqlCommand cmd = new SqlCommand(sql, GetConn());res = cmd.ExecuteNonQuery();}catch (Exception ex){throw ex;}finally{if (conn.State == ConnectionState.Open){conn.Close();}}return res;}
</span></span>


到目前為止,對于SQLHelper的基本精簡編寫,就結束了。

?

四、擴展

在上面,我們使用了Try?Catch語句,但我們發現在最后關閉數據庫的時候,又重復了寫了一遍if語句,那么,這一段有沒有方法精簡呢,答案是:使用Using語句。

PS:在這篇博客中,只是簡單的對于SQLHelper進行了外形上的處理,還有內容上的處理:比如:參數化查詢,執行存儲過程等。敬請期待下一篇吧!

?

五、個人感受

之前一直在用,但一直都不知道它是怎么來的,自己也寫不出來。但真的是:萬丈高樓平地起。帶來了很大便利的SQLHelper,也是一步一步的精簡而來。


?

?

?


轉載于:https://www.cnblogs.com/hhx626/p/6010445.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257584.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257584.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257584.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OPENCV圖像輪廓檢測

前面在圖像轉換的時候學到canny算子,可以檢測出圖像的輪廓信息,但是,該算子檢測到的輪廓信息還需要我們手動的用眼睛去識別,而實際工程應用中,我們需要得到輪廓的具體數學信息,這就涉及到今天的主題,圖像輪廓檢測. 一.圖像輪廓檢測 在opencv中,輪廓對應著一系列的點的集合,open…

mysql 5.7.11 授權_mysql 5.7.11 安裝配置教程

六步輕松搞定mysql5.7.11的安裝1、下載安裝包。mysql-5.7.11版本&#xff1a;2、拷貝到任意盤&#xff1a;例如&#xff0c;解壓后拷貝文件夾至C盤&#xff1a;C:\Program Files\mysql。建議文件夾名字使用英文。3、配置環境變量&#xff1a;計算機—>右鍵—>高級系統設置…

iOS 面試之Block

轉自&#xff1a;http://blog.csdn.net/xunyn/article/details/11658261 1 什么是block 對于閉包&#xff08;block),有很多定義&#xff0c;其中閉包就是能夠讀取其它函數內部變量的函數&#xff0c;這個定義即接近本質又較好理解。對于剛接觸Block的同學&#xff0c;會覺得有…

當安全遇到大數據 “永恒之藍”也將無所遁形!

文章講的是當安全遇到大數據 “永恒之藍”也將無所遁形&#xff01;5月12日&#xff0c;席卷全球的勒索病毒“永恒之藍”讓全世界都為之震動&#xff0c;這是迄今為止全球最大規模的勒索病毒網絡攻擊&#xff0c;100多個國家受到病毒感染&#xff0c;國內中石油、公安內網、高校…

[ES] 安裝

1.ElasticSearch安裝的準備工作 Linux&#xff1a;CentOS6.4 Elasticsearc:elasticsearch-2.2.0 JDK:jdk-7u79-linux-x64 IK:1.8.0 MAVEN:apache-maven-3.3.3-bin 2.配置網絡靜態文件 虛擬機設置橋接模式 配置&#xff1a;vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVIC…

語言基礎之description方法

1.description方法的一般用處 1: // 指針變量的地址 2: NSLog("%p", &p); 3: // 對象的地址 4: NSLog("%p", p); 5: // <類名&#xff1a;對象地址> 6: NSLog("%", p); 1: Class c [Person class]; 2: …

亞信安全協助綠谷制藥確保“秘方”安全

近幾年&#xff0c;我國醫藥生物技術發展態勢迅猛&#xff0c;加強知識產權保護己成為當務之急。為確保制藥配方數據和生產管理信息系統安全&#xff0c;上海綠谷制藥有限公司采用亞信安全服務器深度安全防護系統&#xff08;Deep Security&#xff09;和亞信安全防毒墻網絡版&…

mysql判斷疊字_格律詩的八大語法特點

古風的語法&#xff0c;本來就和散文的語法大致相同&#xff0c;直到近體詩&#xff0c;才漸和散文不同&#xff0c;原因是&#xff0c;首先在區區五字或七字之中&#xff0c;要施展豐富的想象&#xff0c;不能不力求簡潔&#xff0c;凡可省去而不至于影響語意的字&#xff0c;…

旅游行業春節檔期的大數據營銷

本文講的是旅游行業春節檔期的大數據營銷,雖然我國是以傳統農耕文化為主導的社會&#xff0c;每逢春節講究返鄉團聚。但現代化的城市文明更是對很多人的生活方式產生了影響&#xff0c;特別是生活在大城市中的年輕人&#xff0c;以及由年輕人構成的小家庭來說&#xff0c;春節的…

openwrt lamp

https://applefreak111.wordpress.com/2013/03/12/howtoopenwrt-lamp-stack%E5%AE%89%E8%A3%9D/opkg update安裝Lighttpd, MySQL 5, 和PHP 5。opkg install lighttpd lighttpd-mod-cgi lighttpd-mod-fastcgivi /etc/lighttpd/lighttpd.confcgi.assign ( “.php” > “/usr/…

MySQL本天早上8點到明早8點_似乎找到 OSChina 早上 8 點鐘容易宕機的原因

最近一段時間&#xff0c;OSChina 網站在早上 8 點出頭的時候很容易因為數據庫連接池爆滿而導致網站宕機。表現的情況是數據庫處理大量的查詢&#xff0c;堆積大量并發連接&#xff0c;導致無法再連接到數據庫&#xff0c;執行一個簡單的查詢速度也非常慢&#xff0c;數據庫機器…

基于Eclipse搭建STM32開源開發環境

最近項目不忙&#xff0c;想著沒事看看簡單的嵌入式&#xff0c;弄弄物聯網什么的。于是就從廉價的STM32開刀了。因為一直是做PC軟件開發的&#xff0c;那VS的智能感知那叫一個爽啊&#xff0c;相比之下&#xff0c;覺得這個Keil簡直就像文本編輯器一樣low。于是想換一個開發環…

數據中心不再有空調、風扇等冷卻裝置會怎樣?

數據中心的變革有望依賴移動設備實現&#xff0c;手機里輕便設備或將成為下一代數據中心的基礎設施&#xff0c;服務Google和Facebook等大型的應用程序服務企業。同時&#xff0c;這種商業模式也會構建新一代企業的發展形態&#xff0c;為初創企業帶來前所未有的機遇。 CSDN大數…

.NET 數據庫緩存依賴策略實現

處理大型門戶網站 一般都需要 使用緩存技術這個web加速器在 PHP 和 java 一般 使用的是 基于squid 來做. 當然在 windows .NET 平臺也是可以的 squid有 windows版本.這個以后再去研究,現在 就介紹一下 .NET 自帶的 緩存策略.Microsoft的petshop就用到了它;  一、基于數據庫觸…

大數據面臨的挑戰:當大數據遭遇云計算

本文講的是大數據面臨的挑戰&#xff1a;當大數據遭遇云計算,大數據正在徹底改變IT世界。那么&#xff0c;什么樣的數據談得上數據呢? 根據IDC的報告&#xff0c;未來十年全球大數據將增加50倍。僅在2011年&#xff0c;我們就將看到1.8ZB(也就是1.8萬億GB)的大數據創建產生。這…

Climbing Stairs - Print Path

stair climbing&#xff0c; print out all of possible solutions of the methods to climb a stars, you are allowed climb one or two steps for each time; what is time/space complexity? &#xff08;use recursion&#xff09; 這道題難是難在這個ArrayList<Strin…

java 單例設計_Java 之單例設計模式

設計模式: 對問題行之有效的解決方式, 其實它是一種思想.單例設計模式解決的問題:就是可以保證一個類在內存中的對象唯一性. 即單個實例.比如對于A 和 B 兩個程序使用同一個配置信息對象時, A 對配置信息作出修改, B 也與之對應的更新配置信息, 即需要保證該對象的唯一性.如何保…

Javascript之RegExp

RegExp對象的構造器 new RegExp(pattern[, flags]) pattern 正則表達式文本flags 該參數可以是下面幾個值的任意組合&#xff1a;g 全局匹配i 忽略大小寫m 讓開始和結束字符&#xff08;^ 和 $&#xff09;工作在多行模式&#xff08;也就是&#xff0c;^ 和 $ 可以匹配字符串中…

DS汽車通過采用沉浸式虛擬現實技術實現展廳轉型

PSA集團&#xff08;PSA Group&#xff09;旗下的高端品牌DS汽車公司&#xff08;DS Automobiles&#xff09;采用達索系統的“虛擬車庫&#xff08;Virtual Garage&#xff09;”行業解決方案為全新的SUV車型DS 7 CROSSBACK提供全面支持&#xff0c;推動其展廳轉型&#xff0c…

java 日歷記事本_calendar 一個用java編寫的日歷記事本. 具有正常日歷功能;也可以用于在不同日期記錄下當日重要的事情 - 下載 - 搜珍網...

日歷記事本/日歷記事本/build/classes/日歷記事本/CalendarPad$1.class日歷記事本/日歷記事本/build/classes/日歷記事本/CalendarPad.class日歷記事本/日歷記事本/build/classes/日歷記事本/Month.class日歷記事本/日歷記事本/build/classes/日歷記事本/NotePad.class日歷記事…