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 

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

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

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

(0)
上一篇 2022年4月24日 下午10:00
下一篇 2022年4月24日 下午10:00


相关推荐

  • [TensorFlowJS只如初见]实战三·使用TensorFlowJS拟合曲线

    [TensorFlowJS只如初见]实战三·使用TensorFlowJS拟合曲线问题描述拟合y=x*x-2x+3+0.1(-1到1的随机值)曲线给定x范围(0,3)问题分析在直线拟合博客中,我们使用最简单的y=wx+b的模型成功拟合了一条直线,现在我们在进一步进行曲线的拟合。简单的y=wx+b模型已经无法满足我们的需求,需要利用更多的神经元来解决问题了。代码&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;script…

    2022年7月16日
    21
  • 解决Ubuntu18.04无法安装旧版本gfortran4.6

    解决Ubuntu18.04无法安装旧版本gfortran4.61 问题描述在使用中国镜像源后无法使用 apt get 安装 gfortran4 6 如下图所示 2 解决方案只需将以下几行添加到我的 etc apt sources list 文件中即可满足我的需求 debhttp archive ubuntu com ubuntutrusty security ubuntu com ubuntutrusty securitymain

    2025年11月22日
    5
  • 开源工具—-开源工作流神器n8n:零成本搭建你的自动化帝国

    开源工具—-开源工作流神器n8n:零成本搭建你的自动化帝国

    2026年3月15日
    3
  • StringUtils.isNotEmpty 等方法

    StringUtils.isNotEmpty 等方法StringUtils 方法的操作对象是 java lang String 类型的对象 是 JDK 提供的 String 类型操作方法的补充 并且是 null 安全的 即如果输入参数 String 为 null 则不会抛出 NullPointerE 而是做了相应处理 例如 如果输入为 null 则返回也是 null 等 具体可以查看源代码 除了构造器 StringUtils 中一共有 130 多个方法 并且都是 stati

    2026年3月17日
    2
  • java jute_ZooKeeper源码分析-Jute-第一部分

    java jute_ZooKeeper源码分析-Jute-第一部分Hadooprecord O 包含 class 文件以及 record 描述语言解释器用于简化 records 的序列化和反序列化 介绍任何显著复杂性的软件系统都需要与外界进行数据交换的机制 数据交互通常涉及到输入输出数据逻辑单元的封包和解包 如文件 网络连接 内存缓冲区等等 应用程序通常嵌套了操作代码用于序列化和反序列化数据类型 序列化的工作有几个特性 它可以使得代码自动化生成 给你一个特别的输出

    2026年3月18日
    2
  • linux内核编程指南_linux内核源码详解

    linux内核编程指南_linux内核源码详解本章主要是as86与gas两种汇编语言的简要介绍,C语言与汇编语言的相互嵌套,目标文件的结构与及makefile文件的简要语法。  1,as86汇编的简要语法及命令可以参考http://blog.csdn.net/astraylinux/article/details/7301596  2,gas汇编与intel汇编的主要区别:(具体语法参考:http://blog.csdn.net/as

    2022年10月8日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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