机房重构之SqlHelper

机房重构之SqlHelper


          在机房重构中,D层中有很多的类,其中很多都需要跟数据库打交道,就是所谓的增删改查,这些命令的执行就都是重复性的,仅仅是查询内容和数据表不同,就是所谓的查询参数和查询数据库的语句不同。

          但是,执行查询的语句都是相同的,所以,就没有必要在D层的每个类中都写数据库的执行语句,而是把它们拿出来写成一个一个的自定义函数,并把这些函数封装到一个类当中,这个类就是SqlHelper,SqlHelper就是封装了一些对数据库操作的方法。

          在VB版本的机房中,也是把对数据库的操作封装成了一个函数,把这个函数放在公共模块中,供所有的窗体调用,代码如下可以看出具体的操作分为了两类,一个是增删改操作,一个查询操作。


<span style="font-size:24px;">Public Function Executesql(ByVal sql As String, msgstring As String) As ADODB.Recordset
    Dim cnn As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim stokens() As String
    stokens = Split(sql)
    Set cnn = New ADODB.Connection
    cnn.Open connectstring
    If InStr("insert,delete,update", UCase$(stokens(0))) Then
        cnn.Execute sql
        msgstring = stokens(0) & "query successful"
    Else
        Set rst = New ADODB.Recordset
        rst.Open Trim$(sql), cnn, adOpenKeyset, adLockOptimistic
        Set Executesql = rst
        msgstring = "查询到" & rst.RecordCount & "条记录"
    End If
executesql_exit:
    Set rst = Nothing
    Set cnn = Nothing
    Exit Function
End Function
</span>

          在VB.NET版的机房重构中,具体的操作也是分为了两类,一类是查询,一类是增删改操作,根据是否带参数,分为四个自定义函数。

          查询就是要去查东西,肯定都必须要有返回值Boolean,或者有返回结果DataTable,而增删改操作直接在数据中进行执行,不要求必须要有返回的结果,但是在对数据库的执行过程中,要设置异常处理,就是如果遇到错误之后,它会马上把该错误的具体的信息抛出,表示对数据库的操作失败。

          1、带参数的查询,比如学生查看余额,查看充值记录,查看学生信息,返回的结果是表DataTable。

          2、不带参数的查询,比如查询操作员工作记录,查询的是整张表,不需要任何的参数,返回的结果也是DataTable。

          3、带参数的增删改,比如删除某个用户参数为——选中要删除的用户,修改密码和充值参数为——卡号,用户充值等,不要求有返回结果。

          4、不带参数的增删改,比如学生注册,用户退卡添加退卡信息,添加用户充值记录等,不要求有返回结果。

          下面是具体的代码,仅供参考。

Public Class SqlHelper

    '利用配置文件寻找连接字符串,建立cmd文件
    '定义变量,获得数据库连接字符串  
    '定义cmd命令
    Private ReadOnly constr As String = System.Configuration.ConfigurationSettings.AppSettings("strConn")
    Dim conn As New SqlConnection(constr)
    Dim cmd As New SqlCommand

    '一共是四个自定义的函数,但是只有两个方法名
    '系统会自动根据参数的不同,是否有参数,决定调用哪一个方法
    '就是方法的名字相同,但是参数不同

    'cmdText——用来传递SQl语句
    'cmdType——决定Command如何解释CommandText属性的内容默认取值为Text,即SQL语句
    'sqlParameters——是CommandText属性所指定的SQL语句或存储过程的参数集合

    '查询操作,带参数,返回结果是表
    Public Function GetDataTable(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlparams As SqlParameter()) As DataTable
        '建立数据库连接
        cmd = conn.CreateCommand()

        '将该函数的三个参数,分别赋给相应的对象
        '设置具体的sql语句
        '设置解释CommandText的方式
        '设置具体的执行参数
        cmd.CommandText = cmdText
        cmd.CommandType = cmdType
        cmd.Parameters.AddRange(sqlparams)

        '定义数据适配器变量,并实例化,将cmd绑定在adapter上面
        '定义数据缓存变量
        '定义变量返回数据表
        Dim sqlAdapter As New SqlDataAdapter(cmd)
        Dim ds As New DataSet
        Dim dt As New DataTable

        Try
            '打开连接
            '用adapter将dataset填充
            '返回查询的结果,数据表
            conn.Open()
            sqlAdapter.Fill(ds)
            dt = ds.Tables(0)

            '捕获,并且抛出该异常
            'Exception——系统抛出的异常
            'ex——通过ex,显示该异常内容
        Catch ex As Exception
            MsgBox(ex.Message, , "数据库操作")
        Finally
            Call CloseConn(conn)
            Call CloseCmd(cmd)
        End Try
        Return dt
    End Function

    '查询操作,不带参数,返回结果是表
    Public Function GetDataTable(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable
        cmd = conn.CreateCommand()
        cmd.CommandText = cmdText
        cmd.CommandType = cmdType

        '定义数据适配器变量,并实例化,将cmd绑定在adapter上面
        '定义数据缓存变量
        Dim sqlAdapter As New SqlDataAdapter(cmd)
        Dim ds As New DataSet
        Dim dt As New DataTable

        Try
            conn.Open()
            sqlAdapter.Fill(ds)
            dt = ds.Tables(0)
        Catch ex As Exception
            MsgBox(ex.Message, , "数据库操作")
        Finally
            Call CloseConn(conn)
            Call CloseCmd(cmd)
        End Try
        Return dt
    End Function

    '增删改操作,带参数,没有返回结果
    Public Function NoReturn(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlparams As SqlParameter())
        cmd = conn.CreateCommand
        cmd.CommandText = cmdText
        cmd.CommandType = cmdType
        cmd.Parameters.AddRange(sqlparams)

        Try
            conn.Open()
            cmd.ExecuteNonQuery()
        Catch ex As Exception
            MsgBox(ex.Message, , "数据库操作")
        Finally
            Call CloseConn(conn)
            Call CloseCmd(cmd)
        End Try
        Return True
    End Function

    '增删改操作,不带参数,没有返回结果
    Public Function NoReturn(ByVal cmdText As String, ByVal cmdType As CommandType)
        cmd = conn.CreateCommand
        cmd.CommandText = cmdText
        cmd.CommandType = cmdType

        Try
            conn.Open()
            cmd.ExecuteNonQuery()
        Catch ex As Exception
            MsgBox(ex.Message, , "数据库操作")
        Finally
            Call CloseConn(conn)
        End Try
        Return True
    End Function

    ''' <summary>  
    ''' 关闭连接  
    ''' </summary>  
    '''<param name="conn ">需要关闭的连接</param>  
    '''<remarks>2015-3-29 17:22:31</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>2015-3-29 17:22:31</remarks>  
    Public Sub CloseCmd(ByVal cmd As SqlCommand)
        If Not IsNothing(cmd) Then  '如果cmd命令存在  
            cmd.Dispose()           '销毁  
            cmd = Nothing
        End If
    End Sub
End Class


你可能感兴趣的:(机房重构之SqlHelper)