• SqlHelper——数据库小助手



    SqlHelper其实就是一个类。

        早就听说过“SqlHelper”这个名词,也查过相关的资料,但还是一头雾水。当真的去实践去用它时,就会发现其实它没那么神秘。

        当敲第一个窗体的时候,功能实现了,我们就会觉得很高兴,大功告成了。可是当敲完第二个窗体、第三个窗体的时候,慢慢的就开始觉得代码重复的太多了,越敲就越觉得心虚。虽然设计模式学的不怎么样,但是最起码让我有了这个意识去想怎么让代码更少一些,让彼此之间的耦合度尽量减少。在三层中,要数D层的代码相似度最高了,总结来说,也就是连接数据库,增删改查的功能。那么,我们完全可以把这部分共同的东西拿出来放在一起,这样既能减少了代码量,也很好的做到了封装。

    SqlHelper这个类里,有几个方法

       在sqlhelper中,最重要的无非是那几个增删改查的方法了。查了很多博客,类中的方法也有很多种,包括ExecuteNonQuery、ExecuteReader、ExecuteDataSet、ExecuteScalar、ExecuteXmlReader等,但我们并不会都用到,有的方法了解一下就好了。方法可以划分的细,但如果分的太细,就会弄的太复杂了。我习惯把方法分的少一些。


    Public Class sqlHelper
        ''' <summary>
        ''' 有参数的增、删、改操作
        ''' </summary>
        ''' <param name="cmdText"></param>
        ''' <param name="cmdType"></param>
        ''' <param name="paras"></param>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Function ExecuteNoQuery(cmdText As String, cmdType As CommandType, paras As SqlParameter()) As Integer
            Dim ConnStr As String = System.Configuration.ConfigurationManager.AppSettings("ConnStr")
            Dim conn As SqlConnection = New SqlConnection(ConnStr)
            '定义一个命令对象
            Dim cmd As New SqlCommand
            cmd = New SqlCommand(cmdText, conn)   'budong
            cmd.CommandType = cmdType
            cmd.Parameters.AddRange(paras)
            Dim res As Integer  '定义一个变量用户存放返回结果
         
            Try
                '打开数据库
                If conn.State = ConnectionState.Closed Then
    
                    conn.Open()
                End If
    
                res = cmd.ExecuteNonQuery()
            Catch ex As Exception
                MsgBox(ex.Message, "数据库操作")
            Finally
                '关闭数据库
                If conn.State = ConnectionState.Open Then
                    conn.Close()
                End If
            End Try
            Return res '返回受影响的行数
        End Function
    
        ''' <summary>
        ''' 无参数的增、删、改操作
        ''' </summary>
        ''' <param name="cmdText"></param>
        ''' <param name="cmdType"></param>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Shared Function ExecuteNoQuery(cmdText As String, cmdType As CommandType) As Integer
            Dim ConnStr As String = System.Configuration.ConfigurationManager.AppSettings("ConnStr")
            Dim conn As SqlConnection = New SqlConnection(ConnStr)
    
            Dim cmd As New SqlCommand  '定义一个命令对象
            cmd.CommandType = cmdType
    
            cmd = New SqlCommand(cmdText, conn)
            Dim res As Integer  '定义一个变量用户存放返回结果
            'cmd.Parameters.AddRange(paras)     该方法没有参数,不用添加
            Try
                '打开数据库
                If conn.State = ConnectionState.Closed Then
    
                    conn.Open()
                End If
    
                res = cmd.ExecuteNonQuery()
            Catch ex As Exception
                MsgBox(ex.Message, "数据库操作")
            Finally
                '关闭数据库
                If conn.State = ConnectionState.Open Then
                    conn.Close()
                End If
            End Try
            '返回受影响的行数
            Return res
        End Function
    
    
        ''' <summary>
        ''' 有参数的查询操作
        ''' </summary>
        ''' <param name="cmdTxt"></param>
        ''' <param name="cmdType"></param>
        ''' <param name="paras"></param>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Function GetDataTable(ByVal cmdTxt As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As DataTable
            Dim strConnStr As String = System.Configuration.ConfigurationManager.AppSettings("ConnStr")
            '定义一个数据库连接对象  
            Dim conn As SqlConnection = New SqlConnection(strConnStr)
            '定义一个命令对象  
            Dim cmd As New SqlCommand
            Dim adataset As DataSet
            '定义一个适配器对象  
            Dim adaptor As SqlDataAdapter
            cmd = New SqlCommand(cmdTxt, conn)
            adaptor = New SqlDataAdapter(cmd)
            adataset = New DataSet
            cmd.CommandType = cmdType
            cmd.Parameters.AddRange(paras)
            Try
                '打开数据库连接  
                If conn.State = ConnectionState.Closed Then
                    conn.Open()
    
                End If
                '填充数据集  
                adaptor.Fill(adataset)
                Return adataset.Tables(0)
            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                '关闭数据库连接  
                If conn.State = ConnectionState.Open Then
                    conn.Close()
    
                End If
            End Try
    
    
        End Function
    
        ''' <summary>
        ''' 无参数的查询操作
        ''' </summary>
        ''' <param name="cmdTxt"></param>
        ''' <param name="cmdType"></param>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Function GetDataTable(ByVal cmdTxt As String, ByVal cmdType As CommandType) As DataTable
            Dim strConnStr As String = System.Configuration.ConfigurationManager.AppSettings("ConnStr")
            '定义一个数据库连接对象  
            Dim conn As SqlConnection = New SqlConnection(strConnStr)
            '定义一个命令对象 
            Dim cmd As New SqlCommand
            Dim adataset As DataSet
            '定义一个适配器对象  
            Dim adaptor As SqlDataAdapter
            cmd = New SqlCommand(cmdTxt, conn)
            adaptor = New SqlDataAdapter(cmd)
            adataset = New DataSet
            cmd.CommandType = cmdType
            'cmd.Parameters.AddRange(paras)  没有参数,无需添加
            Try
                '打开数据库连接  
                If conn.State = ConnectionState.Closed Then
                    conn.Open()
    
                End If
                '填充数据集  
                adaptor.Fill(adataset)
                Return adataset.Tables(0)
            Catch ex As Exception
                MsgBox(ex.Message, , "数据库操作")
            Finally
                '关闭数据库连接  
                If conn.State = ConnectionState.Open Then
                    conn.Close()
    
                End If
            End Try
    
    
        End Function
     
    End Class
    


    类有了,那怎么用呢?

        有了参数,不就可以调用了。

        CmdTxt就是sql语句。

        CommandType有三个属性:StoredProcedure(存储过程),TableDirect(表),text(SQL文本命令,较常用)。

        SqlParameter属性:在写sql语句的时候我们会定义变量,SqlParameter就是用来给数据库中定义的变量传值用的。

    例如:

    Dim paras As SqlParameter() = {New SqlParameter("@cardno", student.cardno)}
    @cardno是变量,student.cardno是实体的值。


    注意:Add与AddRange的区别

    Add:将指定的对象添加到……中,AddRange:向……末尾,添加数组

    Add该方法每次只能添加一个SqlParameter。AddRange可添加多个SqlParameter。在群里操作时,使用AddRange取代Add。

        这样,我们的SqlHelper小助手就可以帮助完善我们的代码了。遇到一个问题,不用恐惧,先把它简单化,等我们对它有了一定的理解后再去看它复杂的地方。当我们可以灵活的使用ExecuteNonQuery、ExecuteReader、ExecuteDataSet的方法后,其他的内容也就不会难倒我们了。



  • 相关阅读:
    SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因
    微软BI 之SSIS 系列
    微软BI 之SSIS 系列
    微软BI 之SSIS 系列
    微软BI 之SSIS 系列
    微软BI 之SSIS 系列
    微软BI 之SSAS 系列
    微软BI 之SSRS 系列
    微软BI 之SSRS 系列
    配置 SQL Server Email 发送以及 Job 的 Notification通知功能
  • 原文地址:https://www.cnblogs.com/saixing/p/6730335.html
Copyright © 2020-2023  润新知