重构个人版机房收费系统——sqlhelper

        刚开始三层的时候就已经听说sqlhelper的强大了,这次机房收费系统很迫不及待的想试一试。


        以前我们编程序,每次执行增删改查操作都要写一整套的访问数据库的相关代码,除了sql语句基本上都是一样一样的~~所以我们的行为就相当于一直在复制粘贴。以前可能不觉得有什么,学习了c#后,我们了解了一些抽象、封装和代码复用的概念,是不是就觉得有点不舒服了?而SqlHelper就刚好帮我们解决了这一问题。


       SqlHelper,从表层意义来看SQL Helper,即SQL的辅助者。它是一个基于.NET FramWork的数据库操作组件,是对D层一些重复代码的封装,主要用于简化我们重复去写的一些过程,例如数据库连接sqlconnection,sqlcommand等等,通过SqlHelper封装后每种方法的重载都支持不同的方法参数,所以只需要给方法传入不同的参数就可以访问数据库了,大大减少了代码量,实现了代码的高度复用性,很方便。


       SqlHelper包含了一些专用函数,用于管理参数和准备要执行的命令。不管客户端调用什么样的方法实现,所有命令都通过sqlcommand对象来执行。在sqlcommand对象能够被执行前,所有的参数都必须添加到sqlparameters集合中,并且必须正确配置connection、commandtype、commandtext等属性。


       SqlHelper封装的增删改查操作主要分为两大类:有参和无参,每一大类又分为两种方法:对数据库的查询和更新(增、删、改)。呵呵,有没有一种晕乎乎的感觉啊?下面还是通过具体的代码来看一下吧~~


<span style="font-size:18px;">Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration      '需要在管理器中相应的类库下同时添加引用

''' <summary>
''' sqlhelper类封装了广大用户用于高性能、可升级好最佳练习的sql数据操作
''' </summary>
''' <remarks></remarks>
Public Class SqlHelper
    '定义变量
    '获得数据库的连接字符串
    Private ReadOnly strConnection As String = ConfigurationManager.AppSettings("ConnStr")
    '设置连接
    Dim conn As SqlConnection = New SqlConnection(strConnection)
    '定义cmd命令
    Dim cmd As New SqlCommand

    ''' <summary>
    ''' 执行增删改三个操作(有参),返回值为Boolean类型,确认是否执行成功
    ''' </summary>
    ''' <param name=" cmdText ">需要执行语句,一般是sql语句,也有存储过程</param >
    ''' <param name=" cmdType ">判断sql语句的类型,一般都不是存储过程</param >
    ''' <param name="paras" >参数数组,无法确认有多少参数</param >
    ''' <returns></returns >
    ''' <remarks></remarks>
    Public Function ExecAddDelUpdate(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As Integer
        '将传入的值分别为cmd的属性赋值
        cmd.Parameters.AddRange(paras)      '传入参数
        cmd.CommandType = cmdType            '设置一个值来解释cmdText
        cmd.Connection = conn               '设置连接,全局变量
        cmd.CommandText = cmdText           '设置查询语句

        '执行操作
        Try
            conn.Open()                      '打开连接
            Return cmd.ExecuteNonQuery()     '执行增删改操作
            cmd.Parameters.Clear()           '清除参数
        Catch ex As Exception                '如有异常,返回值为0
            Return 0
        Finally
            Call CloseConn(conn)        '关闭连接        
            Call CloseCmd(cmd)          '关闭命令
        End Try

    End Function

    ''' <summary>
    ''' 执行增删改三个操作(无参)
    ''' </summary>
    ''' <param name=" cmdText ">需要执行语句,一般是sql语句,也有存储过程</param >
    ''' <param name=" cmdType ">判断sql语句的类型,一般都不是存储过程</param >
    ''' <returns>Integer,受影响的行数</returns >
    ''' <remarks></remarks>
    Public Function ExecAddDelUpdateNo(ByVal cmdText As String, ByVal cmdType As CommandType ) As Integer
        '为要执行的cmd赋值
        cmd.CommandText = cmdText              '设置sql语句
        cmd.CommandType = cmdType              '设置一个值来解释sql语句
        cmd.Connection = conn                   '设置连接

        '执行操作
        Try
            conn.Open()                       '先是打开连接
            Return cmd.ExecuteNonQuery        '执行增删改操作
        Catch ex As Exception
            Return 0
            'Finally
            '    Call CloseConn(conn)
            '    Call CloseCmd(cmd)
        End Try
    End Function
    ''' <summary>
    ''' 执行查询操作(有参)
    ''' </summary>
    ''' <param name=" cmdText ">需要执行语句,一般是sql语句,也有存储过程</param >
    ''' <param name=" cmdType ">判断sql语句的类型,一般都不是存储过程</param >
    ''' <param name="paras" >传入的参数</param >
    ''' <returns></returns >
    ''' <remarks></remarks>
    Public Function ExecSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As DataTable
        Dim sqlAdapter As SqlDataAdapter
        Dim dt As New DataTable
        Dim ds As New DataSet

        cmd.Parameters.AddRange(paras)
        cmd.CommandText = cmdText
        cmd.CommandType = cmdType
        cmd.Connection = conn

        sqlAdapter = New SqlDataAdapter(cmd)    '实例化adapter
        Try
            'conn.Open()
            sqlAdapter.Fill(ds)               '用adapter将dataset填充
            dt = ds.Tables(0)                 'datatable为dataset的第一个表
            'dt.Load(cmd.ExecuteReader)
            cmd.Parameters.Clear()
        Catch ex As Exception
            MsgBox("查询失败", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告")
        Finally

            Call CloseCmd(cmd)                   '销毁cmd
        End Try

        Return dt
    End Function
    ''' <summary>
    ''' 执行查询操作(无参)
    ''' </summary>
    ''' <param name=" cmdText ">需要执行语句,一般是sql语句,也有存储过程</param >
    ''' <param name=" cmdType ">判断sql语句的类型,一般都不是存储过程</param >
    ''' <returns>datatable,查询到的表格</returns >
    ''' <remarks></remarks>
    Public Function ExecSelectNo(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable
        Dim sqlAdapter As SqlDataAdapter
        Dim ds As New DataSet

        cmd.CommandText = cmdText
        cmd.CommandType = cmdType
        cmd.Connection = conn
        sqlAdapter = New SqlDataAdapter(cmd)    '实例化adapter
        Try
            sqlAdapter.Fill(ds)               '用adapter将dataset填充
            Return ds.Tables(0)              'datatable为dataset的第一个表
        Catch ex As Exception
            Return Nothing
        Finally
            Call CloseCmd(cmd)                   '销毁cmd
        End Try

    End Function
    ''' <summary>
    ''' 关闭连接
    ''' </summary>
    ''' <param name="conn">需要关闭的连接</param>
    ''' <remarks></remarks>
    Public Sub CloseConn(ByVal conn As SqlConnection)
        If (conn.State <> ConnectionState.Closed) Then         '如果没有关闭
            conn.Close()                                       '关闭连接
            conn = Nothing                                     '不指向原对象
        End If
    End Sub

    Public Sub CloseCmd(ByVal cmd As SqlCommand)
        If Not IsNothing(cmd) Then                   '如果命令存在
            cmd.Dispose()                            '销毁命令
            cmd = Nothing
        End If
    End Sub
End Class
</span>


那么我们把方法都抽象封装了,该怎么调用呢?下面就以登录窗体为例来应用一下吧。。。


<span style="font-size:18px;">Imports System.Data
Imports System.Data.SqlClient
Imports Entity
Imports SqlHelper</span>
<span style="font-size:18px;">
Public Class UserDAO 
    Dim dt As New DataTable
    Dim sqlhelper As New Global.SqlHelper.SqlHelper
    Dim flag As Boolean

    ''' <summary>
    ''' 根据ID号得到用户信息
    ''' </summary>
    ''' <param name="user"></param>
    ''' <returns>datatable</returns>
    ''' <remarks></remarks>
    Public Function GetUserInfo(ByVal user As En_UserInfo) As DataTable Implements IUserInfo.GetUserInfo
        Dim sql As String = "select * from user_table where userID=@UserID"            '查询语句
        Dim paras As SqlParameter() = {New SqlParameter("@UserID", user.UserID)}
        '添加参数
        dt = sqlhelper.ExecSelect(sql, CommandType.Text, paras)
        Return dt
    End Function</span>

        有了SqlHelpe这个小助手,确实给我们带来了很大的方便,在以后的实践应用中还要慢慢理解和吸收,主要是这种思想:编程,既不能偷懒,又要学会适当的偷懒~~~







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值