首页 > 代码库 > 个人机房重构之SqlHelper

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