机房重构之SqlHelper应用

由于机房重构过程中每个功能的实现都会涉及到数据库的链接访问,代码重复率非常高,耗时耗力,还会使系统出现代码冗余,是一件非常讨人厌的工作。进而把这些重复的代码抽象成一个类,以直接调用的方式来满足需求。

SqlHelper是一个基于·NET Framework的数据库操作组件,组件中包含数据库操作方法。SqlHelper用于简化重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等。SqlHelper 封装后通常是只需要给方法传入一些参数如数据库连接字符串、SQL参数等,就可以访问数据库了。

这是最近的知识的梳理,初次使用,总结的比较简单,欢迎斧正。

SqlHelper中有两种方法,对数据库的查询和增删改,每种方法都有有参和无参两大类:

以下是在本次机房重构中SqlHelper的代码:

Imports System.Data

Imports System.Data.SqlClient

Imports System.Configuration          ‘添加必要引用

Public Class SqlHelper

‘定义变量

‘获得数据库链接字符串

Private ReadOnly strConnection As String = ("server=192.168.24.68;Database=机房重构.NET;User=sa;Password=123456;")

‘设置链接

Dim conn As SqlConnection = New SqlConnection(strConnection)

‘定义Command命令

Dim cmd As New SqlCommand

‘ <summary>

‘ 执行增删改三个操作,(有参)返回值为Boolean类型,确认是否执行成功

‘ </summary>

‘ <param name="cmdText">需要执行语句,一般是Sql语句,也有存储过程</param>

‘ <param name="cmdType">判断Sql语句的类型,一般都不是存储过程</param>

‘ <param name="paras">参数数组,无法确认有多少参数</param>

‘ <returns></returns>

‘ <remarks></remarks>

Public Function ExecAddDelUpdate(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As Integer

‘将传入的值,分别为cmd的属性赋值

cmd.Parameters.AddRange(paras)        ‘将参数传入

cmd.CommandType = cmdType             ‘设置一个值,解释cmdText

cmd.Connection = conn                 ‘设置连接,全局变量

cmd.CommandText = cmdText             ‘设置SQL语句

Try

conn.Open()                       ‘打开链接

Return cmd.ExecuteNonQuery()      ‘执行增删改操作

Catch ex As Exception

Throw                         ‘如果出错就抛出

Finally

cmd.Parameters.Clear()            ‘清除参数

Call CloseConn(conn)

Call CloseCmd(cmd)

End Try

End Function

‘ <summary>

‘ 执行增删改三个操作,(无参)

‘ </summary>

‘ <param name="cmdText">需要执行语句,一般是Sql语句,也有存储过程</param>

‘ <param name="cmdType">判断Sql语句的类型,一般都不是存储过程</param>

‘ <returns>Interger,受影响的行数</returns>

‘ <remarks>2013年2月2日8:19:59</remarks>

Public Function ExecAddDelUpdateNo(ByVal cmdText As String, ByVal cmdType As CommandType) As Integer

‘为要执行的命令cmd赋值

cmd.CommandText = cmdText               ‘传入查询语句

cmd.CommandType = cmdType               ‘设置Sql语句如何解释

cmd.Connection = conn                   ‘设置连接

‘执行操作

Try

conn.Open()

Return cmd.ExecuteNonQuery

Catch ex As Exception

Return 0

Finally

Call CloseConn(conn)

Call CloseCmd(cmd)

End Try

End Function

‘ <summary>

‘ 执行查询的操作,(有参),参数不限

‘ </summary>

‘ <param name="cmdText">需要执行语句,一般是Sql语句,也有存储过程</param>

‘ <param name="cmdType">判断Sql语句的类型,一般都不是存储过程</param>

‘ <param name="paras">传入的参数</param>

‘ <returns></returns>

‘ <remarks></remarks>

Public Function ExecSeletct(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As DataTable

Dim sqlAdpter As SqlDataAdapter            ‘是 DataSet和 SQL Server之间的桥接器,用于检索和保存数据

Dim dt As New DataTable

Dim ds As New DataSet

‘还是给cmd赋值

cmd.CommandText = cmdText                  ‘设置查询语句

cmd.CommandType = cmdType                  ‘设置Cmd对象的类型

cmd.Connection = conn                      ‘数据库连接语句

cmd.Parameters.AddRange(paras)             ‘传入参数

sqlAdpter = New SqlDataAdapter(cmd)        ‘实例化适配器

Try

sqlAdpter.Fill(ds)                     ‘用adapter将dataSet填充

dt = ds.Tables(0)                      ‘dataTable是dataSet的第一个表

cmd.Parameters.Clear()                 ‘清除参数

Catch ex As Exception

MsgBox("查询失败", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告!")

Finally

Call CloseCmd(cmd)                     ‘最后一定要释放cmd

End Try

Return dt      ‘返回查到的数据

End Function

‘ <summary>

‘ 执行查询的操作,(无参)

‘ </summary>

‘ <param name="cmdText">需要执行语句,一般是Sql语句,也有存储过程</param>

‘ <param name="cmdType">判断Sql语句的类型,一般都不是存储过程</param>

‘ <returns>dataTable,查询到的表格</returns>

‘ <remarks></remarks>

Public Function ExecSelectNo(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable

Dim sqlAdapter As SqlDataAdapter

Dim ds As New DataSet

‘给cmd赋值

cmd.CommandText = cmdText

cmd.CommandType = cmdType

cmd.Connection = conn

sqlAdapter = New SqlDataAdapter(cmd)         ‘实例化适配器

Try

sqlAdapter.Fill(ds)                      ‘用adapter将dataSet填充

Return ds.Tables(0)                      ‘返回dataSet的第一个表

Catch ex As Exception

Return Nothing

Finally

Call CloseCmd(cmd)                       ‘关闭cmd

End Try

End Function

‘ <summary>

‘ 关闭连接

‘ </summary>

‘ <param name="conn">需要关闭的连接</param>

‘ <remarks></remarks>

Public Sub CloseConn(ByVal conn As SqlConnection)

If (conn.State <> ConnectionState.Closed) Then  ‘如果没有关闭

conn.Close()                                ‘关闭连接

conn = Nothing                              ‘不指向原对象

End If

End Sub

‘ <summary>

‘ 关闭命令

‘ </summary>

‘ <param name="cmd">需要关闭的命令</param>

‘ <remarks></remarks>

Public Sub CloseCmd(ByVal cmd As SqlCommand)

If Not IsNothing(cmd) Then                      ‘如果cmd命令还存在

cmd.Dispose()                               ‘释放资源

cmd = Nothing                               ‘不指向原对象

End If

End Sub

End Class

时间: 2024-08-10 15:12:14

机房重构之SqlHelper应用的相关文章

机房重构 之 SqlHelper

机房收费开始一段时间了,刚开始也是敲了一段时间,发现D层访问数据库出现了大量的重复代码,每个D层类都要 单独访问数据库.发现问题,咱们就解决问题,查阅前人的博客,发现了一个SqlHelper类,运用一下,果然好用,省 去了大量时间去写重复的代码. 小面对SQL中的一些类方法进行简单的介绍. 1.SQLHelper.ExecuteNonQuery    作用:用于执行语句 2. SQLHelper.ExecuteScalar       作用:用于获取单字段值语句 3. SQLHelper.Exe

个人机房重构之SqlHelper

在接触SqlHelper之前已经是久闻大名了.机房的重构师傅说先用三层的思想来做,等体会深了在加设计模式和其他的.前天搬着电脑让师傅看了看,指导了指导,然后说可以加一些东西了.我说加这个加那个?师傅说想加什么想用什么回去自己再学学具体的会体会深刻. 其实在写纯三层的时候已经感受到了D层中代码的大量重复.连接数据库查询数据库写SQL语句总是用到那么几句话. 机房收费中关于数据库的操作无非这四种情况: 1.不带参数的增删改操作,返回结果为值 2.带参数的增删改操作,返回结果为值 3.不带参数的查询操

机房重构包图(从三层+实体到三层+实体+外观+工厂+接口+SQLHelper)

刚刚开始接触三层的时候,我只做了两个登录小窗体的例子.画了简单的包图,可以说,为后面机房重构留下了大量的工作(因为三层理解没有深度,也没有理解出自己的东西).不过,欠下的总要还的.在做机房重构的时候,问题出现了.如果只用三层+实体,我能做出来,但是,要求重构不能只用三层+实体,那么,就要好好分析一下了. 首先说说三层+实体:就是表现层(U层)直接调用业务逻辑层(B层)的逻辑,业务逻辑层在直接访问数据层(D层),在把数据返回到B层后返回到U层.首先,只用三层+实体做程序时,灵活性不够高.如果想换数

机房收费系统个人重构关于SQLHelper

近期在敲机房,对于SQLHelper也是心里有些怵,由于原来没用过,可是看了一些博客和资料后发现,假设不用这个类,会大大添加代码量,并且,事实上它并不新,它是一个有多个关于数据库增删改查操作的语句函数的类,使用这个类能够方便D层调用,对数据库的操作,我们无非就是增删改查,而函数就是有无參数,有无返回值,SQLHelper是个新词,只是我们却一直在用,仅仅是我们不这么叫,之所以叫SQLHelper,理所当然它是D层操作数据的助手, 在SQLHelper类中实现的方法包含: ExecuteNonQu

[机房重构]UML图(包图、类图、用例图、时序图)

机房重构画图是一个非常重要的一个阶段,机房重构之前也画过UML的图,但是这一次与上一次不同,这一次有分层的思想在里面. 包图 之前三层的时候各层之间的传递很清晰,包图也很容易就画出来了,先来看之前三层的包图.通过实体将输入的信息从U层传入B层,同时通过实体将信息从D层传入B层,B层进行判断,通过实体将结果返回给U层. 之前的三层不能很好的实现低耦和的思想,并且我们学习了设计模式,要继续进行分层,进行七层的编写.之前不太理解,看大家的博客,知道在U层和B层之间加入了外观模式,降低U层和B层之间的耦

个人机房重构总结

个人版的机房重构花费了一个月的时间,也算是完成了.现在整理一下三层机房收费系统里面的小问题.对于使用三层架构的机房收费系统来说,数据库的设计是一个重点.但是三层架构的小实例也是经典. 为什么很多人在开始项目之后,都无从下手? 因为三层的那个实例没有看懂(并不是没有实现).三层架构的登陆实例,实现不是目的,我们就是要从这个实例中学习,三层的是如何划分,并且是如何调用的. 机房重构的准备工作:     在学习完三层架构理论之后,紧接着的项目就是个人版机房收费系统. 对于三层结构的登陆实例,如果可以理

机房重构前奏——三层转七层

刚敲完三层的小例子之后,感觉还是很简单的,只是通过分层让不同的层次完成不同的工作,减少耦合性.可是接下来师父就直接给了一个大难题,让我将三层转变为七层,这对我来说相当困难,自己当时根本就不知道有哪几层,就开始搜.经过一段时间的思考后,终于能够初步明白登录的七层是那些了.下面是我画的包图: 三层的时候只有UI.BLL.DAL,七层只是在原来基础上添加了外观设计模式.接口和抽象工厂,通过分层来减小耦合度.接下来如何来实现各层之间的链接呢? U层:表示层,主要负责与界面设置. Imports Faca

【机房重构】SQL之视图

最近在重构机房收费系统,越往后就会越感觉到这里更多的是对之前学过知识(数据库,设计模式)的一种应用和回顾.比如在登录功能中用到了抽象加反射,在学生下机中,我们可以用触发器来同时更新两个表.这里就先说一下视图的使用,关于视图的有点和作用百度上有很多答案,在此不再赘述. 视图定义: 自己理解:在涉及到多张表的操作的时候就可使用视图.这样可以避免与数据库直接联系.并且当你更新数据库数据时,就会自动更新视图中的数据,方便以后查询. 百度百科:计算机数据库中的视图是一个虚拟表,其内容由查询定义.同真实的表

【.NET机房重构】——再看抽象工厂加反射实现登录

纯三层的机房重构终于敲完了,但是还需要加设计模式,这又是一道难题.研究了半天的时间,终于对七层的运行步骤熟悉了一些,也对抽象工厂加反射和配置文件了解的更多了一些,下面就看看我的新认识. 这是七层的包图,说是七层,但是七层并不是严格意义上的七层,只不过在三层的基础上加上了工厂.外观和接口,用到设计模式的地方多了自然就形成了一层,所以就有了现在的七层. 各层代码 界面层 分层之后界面层的功能很简单,不能再有逻辑判断,可以有些简单的是否为空或者是否为数字等. <span style="font-