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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Redis主从复制原理_数据库主从复制的原理

    Redis主从复制原理_数据库主从复制的原理十八岁男孩爆肝Redis极品文章,必须三连奥里给爆赞

    2022年8月13日
    1
  • 迭代法求行列式(线性代数公式)

    线性代数行列式计算之迭代法声明与简介线性代数行列式计算之迭代法是利用行列式逐阶展开式会发现或总结出n阶和n-1阶、n-2阶以及剩余阶的关系式,进而推算出整个行列式的最终结果。比如可以由或反过来(),总之能找出一个逐级演变的推导关系式。迭代法又称之为递推法。迭代法正向迭代根据给的行列式可以直观的找出n阶和n-1阶的关系式,这种方法叫做直接迭代法。详见如下示例:计算n阶行列式:#1思路Step1先观察行列式的特点,再整理思路Step2如果我们对第…

    2022年4月11日
    38
  • 无刷直流电机控制技术(无刷直流电机)

    2020-09-14无刷直流电机无位置传感器控制策略传统无刷直流电机安装的霍尔传感器增加了电机的体积和成本、可靠性低、抗干扰能力弱。因此提出了无刷直流电机无位置传感器控制策略,解决了传递霍尔传感器的弊端。1.无刷直流电机2.控制策略控制策略主要包括:反电动势法、三次谐波法、反电势积分法、磁链估测法、续流二极管法、智能控制法等。…

    2022年4月11日
    98
  • PHP怎么调用其他类的方法

    PHP怎么调用其他类的方法

    2021年10月25日
    42
  • 声源定位专项_声源定位算法

    声源定位专项_声源定位算法之前发布了一款声源定位机器人,但是其中还包括图像处理和超声波传感器,以及单片机开发的内容,对于专门想要研究声源定位的朋友可能过于复杂。这次把声源定位的程序摘取出来,并且保证可以独立运行(只需要放到镜像里项目文件夹下),给想研究声源定位的朋友参考。#!/usr/bin/envpythonimportsocketimportsysimportthreadingimportr…

    2022年9月22日
    0
  • pycharm指令_ftp登录及命令行用法

    pycharm指令_ftp登录及命令行用法“阅读本文大概需要3分钟。”相信很多人使用PyCharm来开发Python程序,但却少有人知道,PyCharm实际上有一个命令行程序。通过这个命令行程序可以帮你做很多事…

    2022年8月26日
    5

发表回复

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

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