牛腩新闻发布系统(一):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,也是一步一步的精简而来。
牛腩新闻发布系统(一):SQLHelper重构(一)的更多相关文章
- 牛腩新闻发布系统--学习Web的小技巧汇总
2014年11月10日,是个难忘的日子,这一天,小编的BS学习开始了,BS的开头,从牛腩新闻发布系统开始,之前学习的内容都是CS方面的知识,软考过后,开始学习BS,接触BS有几天的时间了,跟着牛腩老师 ...
- DRP PK 牛腩新闻发布系统
一.JSP与ASP (1)Web服务器的支持:大多数通用的Web服务器如:Apache.Netscape和Microsoft IIS都支持JSP页面,只有微软本身的Microsoft IIS和Pers ...
- 牛腩新闻发布系统(二):SQLHelper重构(二)
导读:在上一篇博客中,介绍了简单的SQLHelper重构,即数据库链接,打开和关闭链接的优化等.现在,将介绍参数化查询和执行命令类型的改造. 一.必要性 1,参数化查询 在上篇博客中,在查询的时候,仅 ...
- 牛腩新闻发布系统(五):VS网站发布及常见问题
导读:在千万个回眸中,终于看见了牛腩的归途.好吧,牛腩该整合的都整合完毕了,到了发布的时候了.这时候,不得不再次感慨那句不知道感慨了多少次的感慨:为什么,我要遭遇这么多的坎坷?下面,结合自己的情况,说 ...
- 牛腩新闻发布系统(三):CSS盒子模型及其基本内容
导读: 这些天一直在做牛腩的网页,比如什么首页.出错页.新闻内容页等.在学习的不断推进中,一些刚开始理解的不是很好的东西,也逐渐的深刻了起来.下面,就对这一段时间的学习,做一个总结.主要总结内容有:盒 ...
- WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping——牛腩新闻发布系统
VS2011使用验证控件出现" WebForms UnobtrusiveValidationMode 需要"jquery"ScriptResourceMapping.请添 ...
- 牛腩新闻公布系统--学习Web的小技巧汇总
2014年11月10日,是个难忘的日子.这一天.小编的BS学习開始了.BS的开头,从牛腩新闻公布系统開始.之前学习的内容都是CS方面的知识,软考过后.開始学习BS,接触BS有几天的时间了,跟着牛腩老师 ...
- 【NodeJS 学习笔记04】新闻发布系统
前言 昨天,我们跟着这位大哥的博客(https://github.com/nswbmw/N-blog/wiki/_pages)进行了nodeJS初步的学习,最后也能将数据插入数据库了 但是一味的跟着别 ...
- News新闻发布系统
News新闻发布系统分页的实现 1.首先我们要在NewsDAO中创建一个方法,返回List<NewsEntity>集合,其中pageIndex表示当前页,pageSize表 ...
随机推荐
- Java之final、static关键字及匿名对象
个人通俗理解: 1.final:首先被final修饰的变量就自动变成的不能被修改的常量了.被修饰的类会自动变成太监类,只能有父类,不能有子类:被修饰的方法也不能被子类重写了:被修饰的引用变量值也不能更 ...
- hihocoder1080 更为复杂的买卖房屋姿势
思路: 线段树区间修改,需要使用两个懒标记set和add.处理好两个标记的优先级即可(set之前的set和add是没有作用的). 实现: #include <bits/stdc++.h> ...
- CSS3 基本要素概览
这篇文章将对 CSS 的几个新属性 (text-shadow,box-shadow,and border-radius) 做基本介绍.这些 CSS3 属性通常用来加强页面布局. RGBA 前面的 ...
- Vue实例的4个常用选项
1.过滤器 filters:在不改变的data的情况下输出前端页面需要的格式数据.例如将小数过滤为整数等.filters是一个对象,里边定义一个function方法,function传入一个参数,fu ...
- LaTeX入门简介
原创链接 http://blog.csdn.net/perfumekristy/article/details/8515272 1.LaTeX软件的安装和使用 方法A(自助):在MikTeX的官网下载 ...
- (转载)EventBus使用详解
(转载)http://liuling123.com/2016/01/EventBus-explain.html 概述 EventBus是针一款对Android的发布/订阅事件总线.它可以让我们很轻松的 ...
- 查询sqlserver数据库,表占用数据大小
if exists(select 1 from tempdb..sysobjects where id=object_id('tempdb..#tabName') and xtype='u')dro ...
- 使用python模拟cookie登陆wooyun
import urllib2 class SimpleCookieHandler(urllib2.BaseHandler): def http_request(self, req): simple_c ...
- mybatis 原理研究
1. mybatis 是使用JDBC来实现的, 所以需要我们首先了解JDBC 的查询 ①加载JDBC驱动 ②建立并获取数据库连接 ③设置sql语句的传递参数 ④执行sql语句并获得结果 ⑤对结果进行转 ...
- 小白安装python软件
首先下载:anaconda3.x 下载方式:百度搜索 清华镜像anaconda https://mirrors.tuna.tsinghua.edu.cn/help/anacond ...