导读:在机房重构的时候,就用到了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

牛腩新闻发布系统(一):SQLHelper重构(一)相关推荐

  1. 新闻发布系统,SQLHelper重构

    在清楚把握牛腩新闻发布系统的需求,以及对系统的数据库也做好了相应的设计后,接下来的几天里就是对后台代码的编写. 在视频中,采用的是经典三层的框架,这对于已经经历过机房重构的我们来说,敲代码还是很容易上 ...

  2. 【牛腩新闻发布系统】开发前的准备01

    前言: 牛腩新闻发布系统已经完成了很久了,在完成的过程中,一步步按照视频的步骤在走,中间探索了一下注释部分是怎么出来的.整个学习过程紧凑而且有序,中间也拖沓了两周有开始接着完成,接下来是整个过程中一些 ...

  3. 牛腩新闻发布系统——后台前台整合技术

    在牛腩新闻发布系统中用到了一些技术我就来总结下 一.鼠标超链接设置 一开始就用到了鼠标超链接的设置.尾部样式的设置,这个东西每个网站都要用到非常长用所以可以写下来积累积累. 举个例子 如图:鼠标没有移 ...

  4. 牛腩新闻发布系统——触发器使用

    触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行.触发器经常 ...

  5. 【牛腩新闻发布系统之handler】

    前言: 敲着牛腩已经有很长时间了,一路走来,没有顺顺利利的!正是因为这样,我才感觉自己有了收获!也正是错误的调试,对牛腩新闻发布系统更加了解了!毕竟,错误的调试是一个经历并成长的过程,今天,主要来总结 ...

  6. 牛腩新闻发布系统——制作母板页

    以牛腩新闻发布系统为例,复述Web开发母版页制作: 单击右键--新建项--选择母版页.命名--确定. 这个母版页中包含三部分不变的内容:top(图片).Search(搜索).footer(底部版权) ...

  7. 【Dongle】【Web】牛腩新闻发布系统之中篇

    相对于前篇总结来说,中篇来得晚了很多,大概都一个多月过去了由于牛腩视频已经看完,并跟着敲了下来,故而在这里,我就总结一下视频后40讲的大概知识点. 在前期框架搭建好之后,中期也就是针对每个页面设计符合 ...

  8. 牛腩新闻发布系统—如何发布

    [前言] 牛腩项目的学习已经接近尾声了,到了该发布的时候了,当时看完牛腩老师的发布系统,并没有很懂,就想着先往下走,当看了Asp.Net第一集的时候,就突然明白怎么回事了,其实也没有那么难. [内容] ...

  9. 牛腩新闻发布系统--阶段总结(一)

    牛腩视频看了有20集了,通过对这部分的学习,让自己对开发一个系统的过程有了一定的了解.虽然之前已经写过好几遍的开发文档,但是这次的真正实践给了自己更加深刻的印象. 我对前17讲的总结如下图: 视频开篇 ...

最新文章

  1. ​图像识别算法超低代码开发方案
  2. 神了,无意中发现一位1500道的2021LeetCode算法刷题pdf笔记
  3. react生命周期和组件生命周期
  4. feign.RetryableException null executing post
  5. Python 学习第三部分函数——第一章函数基础
  6. python漂亮的螺旋_CANVAS 各种螺旋画出来的漂亮图案
  7. Python基础python变量
  8. 你是这样理解shell编程的嘛?
  9. [转]ASP.NET MVC IOC 之AutoFac攻略
  10. html制作跑马灯,html跑马灯制作
  11. javascrip语言精髓与编程实践pdf_C/C 编程推荐学习顺序和书籍
  12. 用友-凭证打印行数如何调整
  13. 学java要学哪些_想学好Java要学哪些东西
  14. linux中apache无法启动,Apache无法启动
  15. 中超赛程分析(5)--德比战
  16. 魔兽服务器维护一般要多少时间,《魔兽世界》魔兽世界维护时间心得
  17. 在项目中遇到导入TXT乱码现象。为什么UTF-8不行?ANSI是什么编码?
  18. golang map 获取某个值
  19. Android 自定义控件之画篮球
  20. Archer Materials通过超级计算机确认12CQ材料的独特性

热门文章

  1. 开发转运维有什么好点的理由_芜湖好点的团购社区费用
  2. CF思维联系– Codeforces-987C - Three displays ( 动态规划)
  3. 通过keras例子理解LSTM 循环神经网络(RNN)
  4. csdn无人驾驶汽车_无人驾驶汽车100年历史
  5. libusb:libusb_bulk_transfer的timeout参数问题
  6. Makefile学习资料及书籍推荐
  7. 1000万贷款三年,到期一次性偿还1500万,这个利息算不算高?
  8. php数据库中数据查询
  9. 消费金融资金断流,银行抽贷、通道暂停,P2P离场
  10. Google云服务降价,整合持续集成工具,支持Windows和托管虚拟机