个人重构机房收费系统——SqlHelper介绍

在敲纯三层版的机房的过程中,对于D层数据库的查询,整个层中重复的代码达到了百分之八十,总结所有D层的代码无非有4中情况,所有的查询操作分为带参数和不带参数的,返回为实体或者datatable类型,所有的非查询操作同样也有带参数和不带参数两种,于是在敲的过程中,我就想着如何把这些代码简化一些,最开始的想法就是把那些重复的代码抽出来组成不同的方法放到一个新的类中,后来才知道原来这个过程早就已经定好了,这个就是大名鼎鼎的SqlHelper。在开始机房之前只是听说过这个,网上查资料也是不太懂,没用过不知道是什么,现在终于懂了!下面介绍一下如何编写SqlHelper类中的代码:

 

上篇博客中介绍了配置文件的使用,这里我们用配置文件的形式获取连接字符串

首先添加引用

<span style="font-size:18px;"><strong>Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
</strong></span>
<span style="font-size:18px;"><strong>Public Class SqlHelper
    '读取配置文件
    Private Shared strConnection As String = ConfigurationManager.AppSettings("strSqlconnection")
    Dim conn As SqlConnection = New SqlConnection(strConnection) '设置连接
    Dim cmd As SqlCommand '设置命令

    '每次数据库关闭之后都要关闭连接和命令
    Private 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>  
    Private Sub CloseCmd(ByVal cmd As SqlCommand)
        '如果没有关闭,则关闭命令,释放对象  
        If Not IsNothing(cmd) Then
            cmd.Dispose()
            cmd = Nothing
        End If
    End Sub</strong></span>

 'SqlHelper中的操作总共有2大类,每类中有两种,分为查询操作和非查询操作,其中每类中包括有参数和无参数两种

<span style="font-size:18px;"><strong>  ''' <summary>    
    ''' 有参数的 非查询 操作  
    ''' </summary>    
    ''' <param name="cmdText">需要执行的命令</param>    
    ''' <param name="cmdType">所执行命令的类型,一般是Sql语句,也有可能是存储过程,或表</param>    
    ''' <param name="sqlParams">参数数组</param>    
    ''' <returns>返回执行 增删改 语句受影响的行数,为Integer类型</returns>    
    Public Function ExecAddDelUpdate(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParams As SqlParameter()) As Integer
        '将传入的值,分别为cmd的属性赋值    
        cmd.Parameters.AddRange(sqlParams)      '将参数传入    
        cmd.CommandType = cmdType               '设置一个值,解释cmdText    
        cmd.Connection = conn                   '设置连接    
        cmd.CommandText = cmdText               '设置查询的语句    
        '执行操作  
        Try
            conn.Open()                         '打开连接    
            Return cmd.ExecuteNonQuery()        '执行增删改操作并返回受影响的行数    
            cmd.Parameters.Clear()              '清除参数    
        Catch ex As Exception
            Return 0                            '如果出错,返回0    
        Finally
            Call CloseConn(conn)                '关闭连接  
            Call CloseCmd(cmd)                  '关闭连接  
        End Try
    End Function
    ''' <summary>  
    ''' 无参数的 非查询 操作  
    ''' </summary>  
    ''' <param name="cmdText">需要执行的命令</param>  
    ''' <param name="cmdType">所执行命令的类型,一般是Sql语句,也有可能是存储过程,或表</param>  
    ''' <returns>返回执行 增删改 语句受影响的行数,为Integer类型</returns>  
    Public Function ExecAddDelUpdate(ByVal cmdText As String, ByVal cmdType As CommandType) As Integer
        '将传入的参数,分别为cmd的属性赋值  
        cmd.CommandType = cmdType               '设置一个值,解释cmdText    
        cmd.Connection = conn                   '设置连接    
        cmd.CommandText = cmdText               '设置查询的语句    
        '执行操作  
        Try
            conn.Open()                         '打开连接    
            Return cmd.ExecuteNonQuery()        '执行增删改操作并返回受影响的行数    
            cmd.Parameters.Clear()              '清除参数    
        Catch ex As Exception
            Return 0                            '如果出错,返回0    
        Finally
            Call CloseConn(conn)                '关闭连接  
            Call CloseCmd(cmd)                  '关闭连接  
        End Try
    End Function
</strong></span>

<span style="font-size:18px;"><strong>  ''' <summary>  
    ''' 有参数的 查询 操作  
    ''' </summary>  
    ''' <param name="cmdText">需要执行的命令</param>    
    ''' <param name="cmdType">所执行命令的类型,一般是Sql语句,也有可能是存储过程,或表</param>    
    ''' <param name="sqlParams">参数数组</param>    
    ''' <returns>返回执行 查询 得到的结果,为DataTable类型</returns>    
    Public Function ExecSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParams As SqlParameter()) As DataTable
        Dim sqlAdapter As SqlDataAdapter        '声明适配器  
        Dim dt As New DataTable                 '声明数据表  
        Dim ds As New DataSet                   '声明数据缓存  
        '将传入的值,分别为cmd的属性赋值    
        cmd.Parameters.AddRange(sqlParams)      '将参数传入    
        cmd.CommandType = cmdType               '设置一个值,解释cmdText    
        cmd.Connection = conn                   '设置连接    
        cmd.CommandText = cmdText               '设置查询的语句    
        sqlAdapter = New SqlDataAdapter(cmd)    '实例化适配器  
        '执行操作  
        Try
            sqlAdapter.Fill(ds)                 '用适配器对ds进行填充  
            dt = ds.Tables(0)                   '返回数据集的第一个表  
            cmd.Parameters.Clear()              '清除参数  
        Catch ex As Exception
            MsgBox("查询失败", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告")
        Finally
            Call CloseConn(conn)                '关闭连接  
            Call CloseCmd(cmd)                  '关闭连接  
        End Try
        Return dt
    End Function
    ''' <summary>  
    ''' 无参数的 查询 操作,返回值为DataTable类型  
    ''' </summary>  
    ''' <param name="cmdText">需要执行的命令</param>    
    ''' <param name="cmdType">所执行命令的类型,一般是Sql语句,也有可能是存储过程,或表</param>    
    ''' <returns>返回执行 查询 得到的结果,为DataTable类型</returns>    
    Public Function ExecSelect(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable
        Dim sqlAdapter As SqlDataAdapter        '声明适配器  
        Dim dt As New DataTable                 '声明数据表  
        Dim ds As New DataSet                   '声明数据缓存  
        '将传入的值,分别为cmd的属性赋值    
        cmd.CommandType = cmdType               '设置一个值,解释cmdText    
        cmd.Connection = conn                   '设置连接    
        cmd.CommandText = cmdText               '设置查询的语句    
        sqlAdapter = New SqlDataAdapter(cmd)    '实例化适配器  
        '执行操作  
        Try
            sqlAdapter.Fill(ds)                 '用适配器对ds进行填充  
            dt = ds.Tables(0)                   '返回数据集的第一个表  
        Catch ex As Exception
            MsgBox("查询失败", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告")
        Finally
            Call CloseConn(conn)                '关闭连接  
            Call CloseCmd(cmd)                  '关闭连接  
        End Try
        Return dt
    End Function
End Class
</strong></span>

一点新的认识:对于这几个查询和非查询的操作返回值类型的讲解:


相比于纯三层的数据库操作中,在SqlHelper中的查询操作返回值为datatable类型,将查询的结果放到一个表里,返回这个表,至于有没有查询数据我们不用管,直接在逻辑层对返回表的内容判断即可,有结果是什么情况和无结果是什么情况分别处理。对于非查询的操作,返回整型进行判断,如果非查询的操作运行成功,返回“1”,如果不成功,返回“0”,然后把这个整型的结果传回B层中,B层针对返回结果的整型类别进行相应处理,当然了,在非查询的返回值问题上还有其他的返回类型,比如boolean类型、实体类型等,如果有必要我们可以扩展SqlHelper类,一切代码以方便我们编写和维护为中心。

通过对SqlHelper的学习,对之前一次一次不耐烦的编写那些重复的代码感到无比痛心,浪费了不少时间呀!其实一个好的系统,不会有太多重复的东西,如果重复的东西太多,就使那些东西失去了本身的价值,在敲代码的过程中就已经意识到了,一个功能的实现过程决不是复制粘贴得来的!找一找他们之间的关系,总能得出好的结果!




SQLHelper类是一个用于在Windows窗体应用程序中管理图书管理系统数据库的帮助类。该类主要用于执行数据库操作,包括连接数据库、执行SQL语句、返回结果集等功能。以下是该类的一些关键功能和特点: 1. 连接数据库:SQLHelper类提供了连接数据库的方法,可以通过指定数据库服务器名称、数据库名称、用户名和密码,建立与数据库的连接。 2. 执行SQL语句:SQLHelper类可以执行各种SQL语句,包括查询、插入、更新、删除等操作。通过传入SQL语句和参数,可以快速执行数据库操作。 3. 返回结果集:SQLHelper类可以返回执行查询操作后的结果集,以便进一步处理数据。可以通过遍历结果集,获取每一行数据的各个字段的值。 4. 参数化查询:SQLHelper类支持参数化查询,可以预编译SQL语句,通过参数传递数据,提高程序的安全性和性能。 5. 异常处理:SQLHelper类可以捕获数据库操作中可能出现的异常,如连接超时、SQL语句错误等,并提供异常处理机制,确保程序的稳定性。 6. 可扩展性:SQLHelper类具有良好的可扩展性,可以根据具体项目需求进行修改和扩展,以适应不同的数据库操作。 使用SQLHelper类可以方便地在图书管理系统中进行数据库操作,包括添加图书、删除图书、借阅图书、归还图书等功能。通过封装数据库操作,可以减少代码的重复性,提高开发效率。同时,SQLHelper类还可以处理数据库操作中的异常情况,保证数据的安全性和系统的稳定性。它是图书管理系统开发过程中的重要工具,可以有效地管理和操作数据库。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值