SqlHelper

SqlHelperSqlHelper

大家好,又见面了,我是你们的朋友全栈君。

    在机房重构的过程中,几乎所有调用D层的过程中,都需要连接数据库,如果每个功能都写一段连接的代码,这不就重复了好多吗?所以我们就可以把这些重复的代码抽象出来写到一个类中,这样就可以实现代码的复用。

我们的功能和数据库的连接大体上可以分为四种情况:

SqlHelper

如何写SQL Helper类:

1.有参数的查询:

方法一:

'执行有参的查询操作
Public Function ExecSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As DataTable
    Using conn As New SqlConnection(strConnection)
        Dim cmd As SqlCommand = conn.CreateCommand()
        Dim adp As SqlDataAdapter
        Dim ds As New DataSet
        cmd.CommandText = cmdText
        cmd.CommandType = cmdType
        cmd.Parameters.AddRange(paras)
        adp = New SqlDataAdapter(cmd)
        Try
            conn.Open()
            adp.Fill(ds)
            Return ds.Tables(0)
        Catch ex As Exception
            Return Nothing
            Throw ex
        End Try
    End Using
End Function

方法二:

'执行有参的查询操作
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.CommandText = cmdText
        cmd.CommandType = cmdType
        cmd.Parameters.AddRange(paras)
        sqlAdapter = New SqlDataAdapter(cmd)
        cmd.Connection = conn
        Try
            conn.Open()
            sqlAdapter.Fill(ds)
            dt = ds.Tables(0)
            cmd.Parameters.Clear()
            Catch ex As Exception
            MsgBox(ex.Message, , "数据库操作")
        Finally
            Call CloseConn(conn)
            Call CloseCmd(cmd)
        End Try
        Return dt
 End Function
 '关闭连接
 Public Shared Sub CloseConn(ByVal conn As SqlConnection)
        If (conn.State <> ConnectionState.Closed) Then
            conn.Close()
            conn = Nothing
        End If
 End Sub
 '释放命令
 Public Shared Sub CloseCmd(ByVal cmd As SqlCommand)
        If Not IsNothing(cmd) Then
            cmd.Dispose()
            cmd = Nothing
        End If
 End Sub

    

    对比上面两种方法,都可以实现对数据库的查询操作,方法一使用using连接池,在使用完成后就会自动关闭数据库连接,然而第二种方法定义了关闭数据库的方法,每次都需要调用CloseConn()方法才能关闭数据库连接,这样在程序运行时,又是就会出现数据库未关闭的错误,所以个人认为使用using连接池比较好。

2.无参数的查询:

'执行无参的查询操作
Public Function ExecSelectNo(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable
    Using conn As New SqlConnection(strConnection)
        Dim cmd As SqlCommand = conn.CreateCommand()
        Dim adp As SqlDataAdapter
        Dim ds As New DataSet
        cmd.CommandText = cmdText
        cmd.CommandType = cmdType
        adp = New SqlDataAdapter(cmd)
        Try
            conn.Open()
            adp.Fill(ds)
            Return ds.Tables(0)
        Catch ex As Exception
            Return Nothing
            Throw ex
        End Try
    End Using
End Function

3.有参数的增删改:

    Public Function ExecAddDelUpdate(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As Integer
        Using conn As New SqlConnection(strConnection)
            Dim cmd As SqlCommand = conn.CreateCommand
            cmd.CommandText = cmdText
            cmd.CommandType = cmdType
            cmd.Parameters.AddRange(paras)
            Try
                conn.Open()
                Return cmd.ExecuteNonQuery
            Catch ex As Exception
                Return 0
                Throw ex
            End Try
        End Using
    End Function

4.无参数的增删改:

'无参的增删改
Public Function ExecAddDelUpdateNo(ByVal cmdText As String, ByVal cmdType As CommandType) As Integer
    Using conn As New SqlConnection(strConnection)
        Dim cmd As New SqlCommand
        cmd.CommandText = cmdText
        cmd.CommandType = cmdType
        Try
            conn.Open()
            Return cmd.ExecuteNonQuery
        Catch ex As Exception
            Return 0
            Throw ex
        End Try
    End Using
End Function

以登录时判断用户是否存在为例,在D层调用SQLHelper

    Public Function SelectUser(enUser As Entity.UsersEntity) As DataTable Implements IDAL.IUser.SelectUser    
        Dim helper As New Helper.SqlHelper  
        Dim dt As New DataTable  
        Dim cmdText As String = "select userPassword,level from [T-Users] where userId=@userId and isOn='是'"  
        Dim sqlParams As SqlParameter() = {New SqlParameter("@userId", enUser.UserId)}  
        dt = helper.ExecSelect(cmdText, CommandType.Text, sqlParams)  
        Return dt  
    End Function 

代码很容易就可以实现,重要是一开始自己的思考。总结上面四种情况,也可以简单的分为查询和增删改两种方法,关于参数如何处理,正在研究中……

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/105761.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • POJ2309 BST

    POJ2309 BST

  • javaScript模块化解析「建议收藏」

    javaScript模块化解析「建议收藏」JavaScript模块化解析什么是模块化?到底什么是模块化、模块化开发呢?事实上模块化开发最终的目的是将程序划分成一个个小的结构;这个结构中编写属于自己的逻辑代码,有自己的作用域,不会影响到其他的结构;这个结构可以将自己希望暴露的变量、函数、对象等导出给其结构使用;也可以通过某种方式,导入另外结构中的变量、函数、对象等;上面说提到的结构,就是模块;按照这种结构划分开发程序的过程,就是模块化开发的过程;无论你多么喜欢JavaScript,以及它现在发展的有多好,它都有很多的缺陷:比如

  • 盘点世界十大软件外包公司排名是哪些公司

    盘点世界十大软件外包公司排名是哪些公司

    2020年11月14日
  • JavaScript像数组添加元素并排序「建议收藏」

    JavaScript像数组添加元素并排序「建议收藏」最近用jscharts做图如上图,柱形排列是没有规律的,将它做出如下调整因为jscharts做表,是使用数组存储数据//准备数据varmyData=newArray([‘Asia’,437,520],[‘Europe’,322,390],[‘NorthAmerica’,233,286],[‘LatinAmerica’,110,162],[‘Afric

  • ajax请求的五个步骤java_如何发送ajax请求?ajax请求的五个步骤详解[通俗易懂]

    ajax请求的五个步骤java_如何发送ajax请求?ajax请求的五个步骤详解[通俗易懂]Ajax是一种可以异步交互数据的技术,目前是前端开发的程序员们最需要的技术之一,那你们知道如何实现ajax吗?它又是怎么实现的呢?跟我一起了解一下吧。什么是ajax?AJAX是一种客户端Web开发技术,用于生成交互式Web应用程序。AJAX是一种开发应用程序的方法,它结合了下面的功能,使用JavaScript将它们组合在一起。AJAX是技术的组合,而不是单一的技术。HTML和C…

  • JVM参数调优总结 -Xms -Xmx -Xmn -Xss「建议收藏」

    “-Xmx1024m-Xms1024m-Xmn512m-Xss256k”——Java运行参数(转)JVM的堆的内存,是通过下面面两个参数控制的-Xms最小堆的大小,也就是当你的虚拟机启动后,就会分配这么大的堆内存给你-Xmx是最大堆的大小当最小堆占满后,会尝试进行GC,如果GC之后还不能得到足够的内存(GC未必会收集到所有当前可用内存),分配新的对象…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号