VB.NET<机房收费系统个人重构版>你都学会了什么(之三)

7 篇文章 0 订阅

         接着上篇对三层架构的介绍之后,来说一下Sqlhelper.


            1、UML图

            2、三层架构

            3、Sqlhelper

            4、配置文件

            5、接口

            6、设计模式


        想在开篇说一句,其实我陆续这几篇文章关于“VB.NET<机房收费系统个人重构版>你都学会了什么”,相对而言没有什么技术可言,就是一只笨鸟,将学到的一些东西,通过自己的视角展示出来。毕竟人不是生下来就什么都会的,而且处在一个开头的阶段,肯定有一些自己当初行走时的困惑和迷茫,也许别人在走相同的路的时候,也会有这样那样的困惑,所以拿出来和大家讨论、分享。


        今天来说一下这个Sqlhelper。在第一遍用三层重构机房收费系统的时候,我根本就没有用到Sqlhelper,也根本不知道Sqlhelper所为何物。因为上网查、看别人博客,也折腾了好久。其实对于Sqlhelper的功用,我觉得应该捎带提一下。我们在编写代码的过程中,往往会出现一些重复的代码,当这些代码大量重复时,我们就要考虑该将这些重复的代码的公共部分提取出来,一旦需要时只要调用就可以了。这似乎有点儿像公共模块,或者说是函数。提取出公共部分,减少了因为大量重复而造成的冗杂,这就是我们要用Sqlhelper的原因。在机房收费系统中,可能开始的时候我们抽取的Sqlhelper没有那么完美,抽出来的sqlhelper还没有那么精简,但是看别人的经验、看别人的博客,上网找资料的过程中,发现别人抽出来的机房收费系统的Sqlhelper是真好,在机房收费系统的sqlhelper中无疑只要4个函数就够了,分别是有参和无参的返回值为Boolean类型函数、有参和无参的返回值为DataTable类型的函数。只要这四个函数就可以满足整个机房收费系统中查询数据的问题了。需要注意的是我们在决定调用Sqlhelper中的哪个函数时要弄明白我们想得到什么,这一点其实很重要,也直接决定你的程序是否能够正确、正常的运行。


        下面我拿Sqlhelper其中一个函数来具体说明 一下它的使用及具体的调用。

这个是有参数,返回值为Boolean类型的函数。

    ''' <summary>
    ''' 执行增删改三个操作,(有参)返回值为Boolean类型,确认是否执行成功
    ''' </summary>
    ''' <param name="strSql">需要执行语句,一般是SQL语句,也有存储过程</param>
    ''' <param name="cmdType">判断sql语句的类型,一般都不是存储过程</param>
    ''' <param name="sqlParams">参数数组,无法确认有多少参数</param>
    ''' <returns>返回值为布尔型,成功为True,不成功为False</returns>
    ''' <remarks></remarks>
    Public Function ExecuteAddDelUpdate(ByVal strSql As String, ByVal cmdType As CommandType, ByVal sqlParams As SqlParameter()) As Boolean
        '用传进的参数填充本类自己的cmd对象
        cmd.Parameters.AddRange(sqlParams)  '参数传入
        cmd.CommandType = cmdType
        cmd.Connection = cnn   '设置连接
        cmd.CommandText = strSql    '设置查询的语句

        Try

            cnn.Open()       '打开连接
            Return cmd.ExecuteNonQuery()   '执行增删改操作
            cmd.Parameters.Clear()    '清除参数
        Catch ex As Exception
            Return False    '如果出错,返回False
        Finally
            Call CloseSqlcnn()
            Call CloseSqlcmd ()
        End Try
    End Function

这个是有参数,返回值为DataTable类型的函数

    ''' <summary>
    ''' 执行查询操作,(有参)返回值为datatable类型  
    ''' </summary>
    ''' <param name="strSql">需要执行语句,一般是Sql语句,也有存储过程</param>
    ''' <param name="cmdType">判断Sql语句的类型,一般都不是存储过程</param>
    ''' <param name="sqlParams">参数数组,无法确认有多少参数</param>
    ''' <returns>返回一个表</returns>
    ''' <remarks></remarks>
    Public Function ExecuteSelect(ByVal str As String, ByVal cmdType As CommandType, ByVal sqlParams As SqlParameter()) As DataTable
        Dim sqlAdapter As SqlDataAdapter
        Dim dtSQL As New DataTable
        Dim dsSQL As New DataSet

        '用传进的参数填充本类自己的cmd对象    
        cmd.CommandText = strSql
        cmd.CommandType = cmdType
        cmd.Connection = cnn
        cmd.Parameters.AddRange(sqlParams)  '参数添加    
        sqlAdapter = New SqlDataAdapter(cmd)   '实例化adapter    
        Try
            sqlAdapter.Fill(dsSQL)           '用adapter将dataSet填充     
            dtSQL = dsSQL.Tables(0)             'datatable为dataSet的第一个表    
            cmd.Parameters.Clear()        '清除参数    
        Catch ex As Exception
            MsgBox("查询失败", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告")
        Finally                            '最后一定要销毁cmd    
            Call CloseSqlcmd()
        End Try
        Return dtSQL
    End Function

    

        这是Sqlhelper中关于有参、返回值为Boolean型的函数和有参、返回值为DataTable行的函数。要记住,第一个函数是在执行增、删、改中才能调用的函数,具体执行“查”的操作要用的是返回DataTable类型的函数。这个是怎么划分的?有什么依据吗?具体的不同之处也就在于在函数内部所执行的操作不同,也就导致了在不同的查询语句中调用不同的函数。下面举个例子说一下具体的调用。以登陆为例,调用Sqlhelper中的有参、返回值为DataTable类型的函数。具体操作如下:

Imports System.Data.SqlClient
Imports SqlHelper
Public Class LoginDAL : Implements IDAL.LoginIDAL
   
    ''' <summary>
    ''' 构造函数,查询用户表中是否有此用户存在
    ''' </summary>
    ''' <param name="user">实体类参数,用来传递用户名和密码</param>
    ''' <returns>返回值为一个表</returns>
    ''' <remarks></remarks>
    Public Function QueryUser(ByVal user As Entity.UserTableEntity) As System.Data.DataTable Implements IDAL.LoginIDAL.QueryUser
        '数据库查询语句
        Dim sqlstr As String
        sqlstr = "select *from UserTable where UserID=@userID And UserPWD=@userPWD"
        '定义一个sqlhelper对象
        Dim sqlhelp As New SqlHelper.SqlHelper
        Dim result As DataTable
        '设置参数
        Dim sqlParams As SqlParameter() = {
            New SqlParameter("@userID", user.UserID),
            New SqlParameter("@userPWD", user.UserPWD)
             }
        '调用sqlhelper
        result = sqlhelp.ExecuteSelect(sqlstr, CommandType.Text, sqlParams)
        Return result
    End Function
End Class

        在这个例子中,首先要明确的是需要什么、返回什么,以此来决定调用哪个函数。这个一个登陆的例子,我们要查询数据库中是否有此用户,如果存在则登陆成功,反之则提示登陆失败。查询数据库中的数据,因为在Sqlhelper中定义的是“查”的部分要调用的是返回值为DataTable类型的函数,所以我们调用的函数为ExecuteSelect。在调用的过程中要正确书写Sql语句,为了防止SQL注入我们为SQL语句设置相应的参数。如果不设置参数的话,最后的调用Sqlhelper括号中可以不用写“sqlParams”.


        总之,Sqlhelper还是要好好研究、好好使用的。貌似Sqlhelper的使用让我们的程序看起来东西更多了,但是从本质上也使我们的程序更为精简,避免了大量重复代码的出现,符合编码规则同时也符合一个程序员编码的原则。


  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值