加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-17 00:16:57 所属栏目:大数据 来源:网络整理
导读:接着上篇对三层架构的介绍之后,来说一下Sqlhelper. 1、UML图 2、三层架构 3、Sqlhelper 4、配置文件 5、接口 6、设计模式 想在开篇说一句,其实我陆续这几篇文章关于“VB.NET机房收费系统个人重构版你都学会了什么”,相对而言没有什么技术可言,就是一只笨

接着上篇对三层架构的介绍之后,来说一下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 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的使用让我们的程序看起来东西更多了,但是从本质上也使我们的程序更为精简,避免了大量重复代码的出现,符合编码规则同时也符合一个程序员编码的原则。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读