机房收费系统个人重构3——sqlHelper

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

其实说了一大堆,我认为sqlHelper就是封装了一个方法,就是操作数据库的方法,方法的重载支持不同的参数和数据访问方式。对数据库的操作我们分为2类:查询和非查询(insert、delete、update)。看代码:(本文中的数据库是SqlServer,所以使用SqlServerHelper类)

       在用SQLHelper之前,我们要先用配置文件配置连接字符串,这样就能够在SQLHelper中方便的使用连接字符串,无论数据库怎么换,对源代码都没有影响: 

  <appSettings >
    <add key="ConnStr"  value="Data Source=(local);DataBase=BaseCharge;user id=sa;password=123456" />   
  </appSettings> 

<span style="font-size:18px;">'/*********************************************************************
'类 名 称:SqlHelper
'命名空间:DAL
'创建时间:2014/8/10 星期日 19:49:04
'作    者:moumou
'小    组:
'修改时间:
'修 改 人:
'版 本 号:v1.0.0
'*********************************************************************/
Imports System.Configuration
Imports System.Data.SqlClient
Public Class SqlHelper
    Dim ConnStr As String = System.Configuration.ConfigurationSettings.AppSettings("ConnStr")       '从配置文件获得字符串并赋值
    Dim sqlconn As SqlConnection = New SqlConnection(ConnStr)                                       '设置链接
    Dim sqlcmd As New SqlCommand
    ''' <summary>
    ''' 关闭命令
    ''' </summary>
    ''' <param name="sqlcmd">释放资源</param>
    ''' <remarks></remarks>
    Private Sub closeCmd(ByVal sqlcmd As SqlCommand)
        If Not IsNothing(sqlcmd) Then
            sqlcmd.Dispose()                                                                         '释放所有资源
            sqlcmd = Nothing
        End If
    End Sub
    ''' <summary>
    ''' 关闭链接
    ''' </summary>
    ''' <param name="sqlconn"></param>
    ''' <remarks></remarks>
    Private Sub closeConn(ByVal sqlconn As SqlConnection)
        If (sqlconn.State <> ConnectionState.Closed) Then
            sqlconn.Close()
            sqlconn = Nothing
        End If
    End Sub
    ''' <summary>
    ''' 有参数的执行(增删改)操作
    ''' </summary>
    ''' <param name="cmdText">需要执行的命令</param>
    ''' <param name="cmdType">所执行的命令的类型,一般为sql语句,也可能为存储过程或表</param>
    ''' <param name="sqlParams">参数组</param>
    ''' <returns>返回执行的结果,为受影响的行数</returns>
    ''' <remarks></remarks>
    Public Function ExecuteAddDeleteUpdate(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParams As SqlParameter()) As Boolean
        sqlcmd.CommandText = cmdText                                        '执行的语句
        sqlcmd.Parameters.AddRange(sqlParams)                               '传入参数
        sqlcmd.CommandType = cmdType                                        '执行语句的类型
        sqlcmd.Connection = sqlconn
        Dim flag As Boolean
        '设置链接
        Try
            sqlconn.Open()                                                  '打开数据库
            flag = sqlcmd.ExecuteNonQuery()
            Return flag                                                     '执行
            sqlcmd.Parameters.Clear()                                       '清空参数
        Catch ex As Exception
            flag = False                                                    '如果出错返回f
        Finally
            Call closeCmd(sqlcmd)
            Call closeConn(sqlconn)
        End Try
        Return flag
    End Function
    ''' <summary>
    ''' 无参数执行(增删改)操作
    ''' </summary>
    ''' <param name="cmdText">需要执行的命令</param>
    ''' <param name="cmdType">执行命令的类型</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function ExecuteAddDeleteUpdate(ByVal cmdText As String, ByVal cmdType As CommandType) As Boolean
        sqlcmd.CommandText = cmdText                                        '执行的语句
        sqlcmd.CommandType = cmdType                                        '执行语句的类型
        sqlcmd.Connection = sqlconn                                         '设置链接
        Dim flag As Boolean
        Try
            sqlconn.Open()                                                  '打开数据库
            flag = sqlcmd.ExecuteNonQuery()                                 '执行
        Catch ex As Exception
            flag = False                                                     '如果出错
        Finally
            Call closeCmd(sqlcmd)
            Call closeConn(sqlconn)
        End Try
        Return flag
    End Function
    ''' <summary>
    ''' 执行有参数的查询操作
    ''' </summary>
    ''' <param name="cmdText">执行查询的语句</param>
    ''' <param name="cmdType">语句类型</param>
    ''' <param name="sqlParams">参数</param>
    ''' <returns>返回查询结果</returns>
    ''' <remarks></remarks>
    Public Function ExecuteSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParams As SqlParameter()) As DataTable
        Dim sqlAdapter As SqlDataAdapter                            '声明一个适配器
        Dim dTable As New DataTable                                 '实例化一个数据表
        Dim Dcache As New DataSet                                   '实例化一个数据缓存
        sqlcmd.CommandText = cmdText                                '要执行的语句
        sqlcmd.CommandType = cmdType                                '语句类型
        sqlcmd.Parameters.AddRange(sqlParams)                       '传入参数
        sqlcmd.Connection = sqlconn                                 '设置连接
        sqlAdapter = New SqlDataAdapter(sqlcmd)                     '实例化适配器
        Try
            sqlAdapter.Fill(Dcache)                                 '对适配器进行填充
            dTable = Dcache.Tables(0)                               '返回数据集的第一张表
            sqlcmd.Parameters.Clear()                               '清空参数
        Catch ex As Exception
            MsgBox("查询失败!", vbOKOnly + vbInformation, "提示")
        Finally
            Call closeCmd(sqlcmd)
            Call closeConn(sqlconn)
        End Try
        Return dTable
    End Function
    ''' <summary>
    ''' 执行无参数的查询操作
    ''' </summary>
    ''' <param name="cmdText"></param>
    ''' <param name="cmdType"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function ExecuteSelect(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable
        Dim sqlAdapter As SqlDataAdapter                            '声明一个适配器
        Dim dTable As New DataTable                                 '实例化一个数据表
        Dim Dcache As New DataSet                                   '实例化一个数据缓存
        sqlcmd.CommandText = cmdText                                '要执行的语句
        sqlcmd.CommandType = cmdType                                '语句类型
        sqlcmd.Connection = sqlconn                                 '设置连接
        sqlAdapter = New SqlDataAdapter(sqlcmd)                     '实例化适配器
        Try
            sqlAdapter.Fill(Dcache)                                 '对适配器进行填充
            dTable = Dcache.Tables(0)                               '返回数据集的第一张表
            sqlcmd.Parameters.Clear()                               '清空参数
        Catch ex As Exception
            MsgBox("查询失败!", vbOKOnly + vbInformation, "提示")
        Finally
            Call closeCmd(sqlcmd)                                   '关闭命令
            Call closeConn(sqlconn)                                 '关闭连接
        End Try
        Return dTable
    End Function
End Class</span>

我的sqlHelper中一共分了两大类:查询、非查询。其中每一类中又包括带参数、不带参数。但是我在实践中发现,带不带参都无所谓,其实我们完全可以都用带参的操作,即使参数中没有任何东西。下面看看在D层是如何调用的:

<span style="font-size:18px;">Imports Entity
Imports IDAL
Imports System.Data.SqlClient
Imports System.Windows.Forms
''' <summary>
''' 查询上机记录
''' </summary>
''' <remarks></remarks>
Public Class QueryLineRecordDAL : Implements IDAL.IQueryLineRecord
    ''' <summary>
    ''' 查询上机记录
    ''' </summary>
    ''' <param name="CardID"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function QueryLineRecord(CardID As String) As List(Of LineEntity) Implements IQueryLineRecord.QueryLineRecord
        Dim sqlHelper As New SqlHelper
        Dim cmdText As String = "select * from T_LineRecord where cardID='" & CardID & " '"
        Dim cmdType As CommandType = CommandType.Text
        Dim parameters As SqlParameter()
        parameters = {}

        Dim dt As New DataTable
        Dim myList As New List(Of Entity.LineEntity)
        dt = sqlHelper.ExecuteSelect(cmdText, cmdType, parameters)
        myList = EntityHelper.convertToList(Of Entity.LineEntity)(dt)
        Return myList
    End Function
End Class</span>

       其实本来应该是不用带参数的,只是这里我为了展现的全面一些,我写上parameters了,虽然在这个过程中它没有实际作用。刚开始我也是照着别人的博客来学用sqlHelper,理解不深,但是后来越用越能发现它的方便,大大提高了代码的复用。希望对大家有帮助,也帮助我改进!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值