个人机房重构之SqlHelper

在接触SqlHelper之前已经是久闻大名了。机房的重构师傅说先用三层的思想来做,等体会深了在加设计模式和其他的。前天搬着电脑让师傅看了看,指导了指导,然后说可以加一些东西了。我说加这个加那个?师傅说想加什么想用什么回去自己再学学具体的会体会深刻。

其实在写纯三层的时候已经感受到了D层中代码的大量重复。连接数据库查询数据库写SQL语句总是用到那么几句话。

机房收费中关于数据库的操作无非这四种情况:

1.不带参数的增删改操作,返回结果为值

2.带参数的增删改操作,返回结果为值

3.不带参数的查询操作,以表为返回结果

4.带参数的查询操作,以表为返回结果

SqlHelper可以将这些方法进行封装,然后使用的时候只需调用。有参数的传参。

Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Public Class SqlHelper

    Private Shared ConnectionString As String = ConfigurationManager.AppSettings("strConn")

    ''' <summary>
    ''' 执行不带参数的增删改操作
    ''' </summary>
    ''' <param name="cmdTxt">参数cmdTxt为所要执行的sql语句</param>
    ''' <param name="cmdType">SqlCommand的执行类型</param>
    ''' <returns>整形返回值res,执行成功则res!=0,不成功则res=0</returns>
    ''' <remarks></remarks>
    Public Shared Function ExecuteNoQuery(ByVal cmdTxt As String, ByVal cmdType As CommandType) As Integer

        Dim conn As SqlConnection = New SqlConnection(ConnectionString) '定义连接变量conn,连接数据库
        Dim cmd As SqlCommand '定义执行命令变量
        Dim res As Integer '定义返回值变量res

        cmd = New SqlCommand(cmdTxt, conn)  '实例化conn上的SqlCommand命令,执行语句为cmdTxt
        cmd.CommandType = cmdType '命令执行的类型

        Try
            '如果数据库连接状态为关闭则将其打开
            If conn.State = ConnectionState.Closed Then
                conn.Open()
            End If
            '执行cmdTxt语句,并将执行结果返回给res(执行成功返回的记录总数)
            res = cmd.ExecuteNonQuery()
        Catch ex As Exception
            '错误处理程序,出错则提示
            MsgBox(ex.Message, , "数据库操作")
        Finally
            '如果连接状态为打开则将其关闭,释放内存
            If conn.State = ConnectionState.Open Then
                conn.Close()
            End If
        End Try

        Return res 'res作为结果返回

    End Function

    ''' <summary>
    ''' 执行带参数的增删改操作
    ''' </summary>
    ''' <param name="cmdTxt">参数cmdTxt为所要执行的sql语句</param>
    ''' <param name="cmdType">SqlCommand的执行类型</param>
    ''' <param name="paras">sql语句中引用的参数</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function ExecuteNoQuery(ByVal cmdTxt As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As Integer

        Dim conn As SqlConnection = New SqlConnection(ConnectionString)  '定义连接变量conn,连接数据库
        Dim cmd As SqlCommand '定义执行命令变量
        Dim res As Integer '定义返回值变量res

        cmd = New SqlCommand(cmdTxt, conn) '实例化conn上的SqlCommand命令,执行语句为cmdTxt
        cmd.CommandType = cmdType  '命令执行的类型
        cmd.Parameters.AddRange(paras)  '执行cmdTxt语句时所带的参数

        Try
            '如果数据库连接状态为关闭则将其打开
            If conn.State = ConnectionState.Closed Then
                conn.Open()
            End If

            '执行cmdTxt语句,并将执行结果返回res(执行成功返回的记录总数)
            res = cmd.ExecuteNonQuery()

        Catch ex As Exception
            '错误处理程序,出错则提示
            MsgBox(ex.Message, , "数据库操作")
        Finally
            '如果连接状态为打开则将其关闭,释放内存
            If conn.State = ConnectionState.Open Then
                conn.Close()
            End If
        End Try

        Return res  'res作为返回值返回

    End Function

    ''' <summary>
    ''' 执行不带参数的查询操作
    ''' </summary>
    ''' <param name="cmdTxt">cmdTxt作为查询时的sql语句</param>
    ''' <param name="cmdType">查询时的查询方式</param>
    ''' <returns>查询后以表的方式返回</returns>
    ''' <remarks></remarks>

    Public Shared Function GetDataTable(ByVal cmdTxt As String, ByVal cmdType As CommandType) As DataTable
        Dim conn As SqlConnection = New SqlConnection(ConnectionString)  '连接数据库
        Dim cmd As New SqlCommand  '实例化命令查询变量
        Dim adataset As DataSet '定义数据缓存变量
        Dim adaptor As SqlDataAdapter '定义数据适配器变量

        cmd = New SqlCommand(cmdTxt, conn) '在conn上面实例化命令变量cmd,执行语句cmdTxt
        adaptor = New SqlDataAdapter(cmd)  '将结果绑定到数据适配器变量adaptor上面
        adataset = New DataSet     '实例化数据缓存变量adataset
        cmd.CommandType = cmdType   '选择命令执行的类型

        Try
            '如果数据库连接状态为关闭则将其打开
            If conn.State = ConnectionState.Closed Then
                conn.Open()
            End If

            '向adaptor对象中填充查询的数据
            adaptor.Fill(adataset)

        Catch ex As Exception
            '出错则提示
            MsgBox(ex.Message, , "数据库操作")
        Finally
            '如果连接状态为打开则将其关闭,释放内存
            If conn.State = ConnectionState.Open Then
                conn.Close()
            End If
        End Try

        '以表的形式返回结果
        Return adataset.Tables(0)

    End Function

    ''' <summary>
    ''' 执行带参数的查询操作
    ''' </summary>
    ''' <param name="cmdTxt">参数cmdTxt为所要执行的sql语句</param>
    ''' <param name="cmdType">查询时的查询方式</param>
    ''' <param name="paras">查询时的命令参数paras</param>
    ''' <returns>查询后以表的方式返回</returns>
    ''' <remarks></remarks>

    Public Shared Function GetDataTable(ByVal cmdTxt As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As DataTable

        Dim conn As SqlConnection = New SqlConnection(ConnectionString)  '连接数据库
        Dim cmd As SqlCommand  '定义命令变量cmd
        Dim adaptor As SqlDataAdapter '定义数据适配器变量
        Dim adataset As DataSet  '定义数据缓存变量

        cmd = New SqlCommand(cmdTxt, conn)  '在conn上面执行实例化命令变量,并执行语句cmdType
        cmd.CommandType = cmdType    '命令执行的类型
        cmd.Parameters.AddRange(paras)  '命令执行时的参数

        adaptor = New SqlDataAdapter(cmd) '将结果绑定到数据适配器变量adaptor上面
        adataset = New DataSet

        Try
            '如果数据连接状态为关闭则打开
            If conn.State = ConnectionState.Closed Then
                conn.Open()
            End If
            adaptor.Fill(adataset)   '向adaptor对象中填充查询的数据
        Catch ex As Exception
            '出错提示
            MsgBox(ex.Message, , "数据库操作")
        Finally
            '如果连接状态为打开则关闭,释放内存
            If conn.State = ConnectionState.Open Then
                conn.Close()
            End If
        End Try

        '以表格形式返回结果
        Return adataset.Tables(0)

    End Function

End Class

SqlHelper这个helper确实帮我们解决了不少问题,减少了代码的重复编写。终于深刻体会了师傅的良苦用心。在机房中有很多值得我们去学习使用实践我们之前的理论知识。

个人机房重构之SqlHelper

时间: 2024-10-03 13:38:45

个人机房重构之SqlHelper的相关文章

机房重构 之 SqlHelper

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

机房重构之SqlHelper应用

由于机房重构过程中每个功能的实现都会涉及到数据库的链接访问,代码重复率非常高,耗时耗力,还会使系统出现代码冗余,是一件非常讨人厌的工作.进而把这些重复的代码抽象成一个类,以直接调用的方式来满足需求. SqlHelper是一个基于·NET Framework的数据库操作组件,组件中包含数据库操作方法.SqlHelper用于简化重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等.SqlHelper 封装后通常是只需要给方法传入一些参数如数据库

机房重构包图(从三层+实体到三层+实体+外观+工厂+接口+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-