• 数据操作的封装--sqlhelper


        为了提高软件的灵活性和可维护性,软件的代码须要科学的管理。我们引入了架构这个词。设计模式提醒我们,软件中反复性的代码须要封装起来。

    近期在做收费系统时。须要和数据库进行频繁的联系。既然是反复的使用,就须要封装,这里使用到了sql helper

           先来看看百度对sqohelper的解释:一个基于.NETFframework的数据库操作组件。尽管不知道组件的详细含义。还是能够猜出来它就是D层中对数据库操作进行封装的工具。

            数据库的操作,不外乎四种模式,增、删、改、查,依据返回值来区分,能够分为有返回值和无返回值两大类,增、删、改操作是不须要返回值的,查询操作返回值就是查询结果。这些操作各自都有两种操作方式,有參数和无參数的。无參数的就是对整张表的操作,有參数的是对个别字段的操作。

       sql helper用到的方法或函数或參数:

       ExecuteNonQuery :此方法用于运行没有返回值的命令(有參数或者没有參数)。它通经常使用于运行数据库(增、删、改)命令,也可用于返回存储过程的输出參数。

       Parameters:此參数用于运行有參数的查询或更新(增、删、改)操作。

       sql Command: 此函数用于封装数据库操作命令。

       CommandType:用于设置数据库连接类型

       CommandText:用于设置数据库连接语句。

    看一下sql helper类代码:

    Imports System.Data.SqlClient
    Imports System.Configuration
    Imports System.Data
    '须要在管理器中加入引用
    Public Class sqlHelper
        '定义变量
        Dim ConnString As String = "Server=.;Database=Charge;User=sa;PassWord=123456"
        '获得数据库连接字符串
        Private ReadOnly strConnection As String = ConfigurationSettings.AppSettings("ConnString")
        Dim conn As SqlConnection = New SqlConnection(strConnection)
        '定义CMD命令
        Dim cmd As New SqlCommand
        ''' <summary>
        ''' 运行查询操作(有參数),參数没有限制
        ''' </summary>
        ''' <param name="cmdText">须要运行的语句,通常是SQL语句。也可能是存储过程</param>
        ''' <param name="cmdType">推断SQL语句的类型。一般不是存储过程</param>
        ''' <param name="sqlparameters">传入參数</param>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Function ParaSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlparameters As SqlParameter()) As DataTable
            '
            Using conn As New SqlConnection(ConnString)  '
                Dim sqlAdapter As SqlDataAdapter         '
                Dim dt As New DataTable         '
                Dim ds As New DataSet          '
                '给CMD赋值
                cmd.CommandText = cmdText
                cmd.CommandType = cmdType
                cmd.Connection = conn
                cmd.Parameters.AddRange(sqlparameters) '加入參数
                sqlAdapter = New SqlDataAdapter(cmd)   '实例化adapter
                Try
                    sqlAdapter.Fill(ds)       '用adapter将dataSet填充
                    dt = ds.Tables(0)        'datatable为dataSet的第一个表 
                    cmd.Parameters.Clear()    '清除參数
                Catch ex As Exception            '抛出异常
                    MsgBox("查询失败", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告")
                Finally
                    Call CloseCmd(cmd)    '销毁cmd命令
                End Try
                Return dt
            End Using
        End Function
        ''' <summary>
        ''' 运行查询操作(无參数)
        ''' </summary>
        ''' <param name="cmdText">同上</param>
        ''' <param name="cmdType">同上</param>
        ''' <returns>dataTable查询到表格</returns>
        ''' <remarks></remarks>
        Public Function NonParaSelect(cmdText As String, cmdType As CommandType) As DataTable
            Using conn As New SqlConnection(ConnString)
                Dim sqlAdapter As SqlDataAdapter
                Dim ds As New DataSet
    
                cmd.CommandText = cmdText
                cmd.CommandType = cmdType
                cmd.Connection = conn
                sqlAdapter = New SqlDataAdapter(cmd)
                Try
                    sqlAdapter.Fill(ds)
                    Return ds.Tables(0)
                    '抛出异常。无返回值
                Catch ex As Exception
                    Return Nothing
                Finally
                    Call CloseCmd(cmd)  '关闭CMD命令
                End Try
            End Using
        End Function
        ''' <summary>
        ''' 运行增、删、改操作(有參数)。使用Integer作为返回值类型。0操作失败。1操作成功
        ''' </summary>
        ''' <param name="cmdText">须要运行的语句</param>
        ''' <param name="cmdType">推断SQL语句类型</param>
        ''' <param name="sqlParameter">參数数组,參数没有限制</param>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Function ParaDataManager(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParameter As SqlParameter()) As Integer
            '使用Usingkeyword实例化连接字符串。给cmd赋值
            Using conn As New SqlConnection(ConnString)
                cmd.Parameters.AddRange(sqlParameter)
                cmd.CommandType = cmdType   '设置一个值,解释cmdText
                cmd.Connection = conn    '设置连接,全局变量
                cmd.CommandText = cmdText '设置查询语句
                Try
                    conn.Open()    '打开连接
                    Return cmd.ExecuteNonQuery   '运行操作
                    cmd.Parameters.Clear()      '清除參数
                Catch ex As Exception        '抛出异常
                    Return 0
                Finally
                    Call CloseConn(conn)
                    Call CloseCmd(cmd)
                End Try
            End Using
        End Function
        ''' <summary>
        ''' 运行增、删、改操作(无參数)
        ''' </summary>
        ''' <param name="cmdType">同上</param>
        ''' <param name="cmdText">同上</param>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Function NonParaDataManager(ByVal cmdType As CommandType, ByVal cmdText As String) As Integer
            '使用Using keyword实例化连接字符串
            Using conn As New SqlConnection(ConnString)
                cmd.CommandText = cmdText      '设置查询语句
                cmd.CommandType = cmdType      '设置SQL语句类型
                cmd.Connection = conn          '设置连接
                Try       '运行操作
                    conn.Open()
                    Return cmd.ExecuteNonQuery    '返回值
                Catch ex As Exception
                    Return 0     '抛出异常。返回0表示操作失败
                Finally
                    Call CloseCmd(cmd)
                    Call CloseConn(conn)
                End Try
            End Using
        End Function
        ''' <summary>
        ''' 关闭连接
        ''' </summary>
        ''' <param name="conn">须要关闭的连接 </param>
        ''' <remarks></remarks>
        Public Sub CloseConn(ByVal conn As SqlConnection)
            If (conn.State <> ConnectionState.Closed) Then       '推断源对象是否关闭
                conn.Close()      '关闭连接
                conn = Nothing          '不指向原对象
            End If
        End Sub
        ''' <summary>
        ''' 关闭命令
        ''' </summary>
        ''' <param name="cmd">须要关闭的命令</param>
        ''' <remarks></remarks>
        Public Sub CloseCmd(ByVal cmd As SqlCommand)
            If Not IsNothing(cmd) Then  '假设CMD命令存在
                cmd.Dispose()             '销毁命令
                cmd = Nothing
            End If
        End Sub
    End Class
    

        sqlhelper类代码分为三部分。第一部分为数据库连接设置部分;第二部分是四个数据库操作,从上到下依次为:有參数的查询、无參数的查询、有參数的更新、无參数的更新;第三部分为关闭连接和销毁命令部分。每一次调用这个类,在结尾都须要关闭命令和连接。查询操作须要返回查询结果,没有返回值得须要返回Integer类型的0或1来推断是否操作成功。

    看看D层代码时怎样调用sql helper的:

    查询操作(有參数):

    Imports System.Data.SqlClient
    Imports System.Data
    Imports Charge.DAL.sqlHelper
    
    Public Class Login
        Public user1 As Charge.Model.User
        Dim strSQL As String
        Dim help As New sqlHelper
        
        Public Function SelectUsers(user1 As Charge.Model.User) As DataTable
            strSQL = "select *  from User_Info where UserName=@UserName and PassWord=@PassWord"
            Dim sqlPara As SqlParameter() = {
            New SqlParameter("@UserName", user1.UserName),
            New SqlParameter("@PassWord", user1.PassWord)
            }
            Return  help.ParaSelect(strSQL, CommandType.Text, sqlPara)
        End Function
    End Class

        这个模块时登录模块,使用username和password作为參数,返回值为DataTable表格。

    更新(加入)操作(有參数):

    Imports System.Data.SqlClient
    Imports Charge.DAL.sqlHelper
    Imports System.Data
    
    Public Class AddUsers
        Dim strSQL As String
        Dim help As New sqlHelper
    
        Public Function AddUser(user3 As Charge.Model.User) As Integer
            strSQL = "insert into [User_Info] (UserName,PassWord,Level,RealName)values(@UserName,@PassWord,@Level,@RealName) "
            Dim sqlPara As SqlParameter() = {
            New SqlParameter("@UserName", user3.UserName),
            New SqlParameter("@PassWord", user3.PassWord),
            New SqlParameter("@Level", user3.Level),
            New SqlParameter("@RealName", user3.RealName)
            }
            Return help.ParaDataManager(strSQL, CommandType.Text, sqlPara)
        End Function
    End Class
       这个模块时插入模块。使用了四个參数。返回值类型为Integer。


       这里没实用到设计模式,仅仅是进行了封装,没实用到泛化和继承。随着进一步的学习,会有更好的办法来解决反复的问题。


  • 相关阅读:
    在centos7下 布隆过滤器2种安装方式
    Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
    redis lua --eval报错1: Lua redis() command arguments must be strings or integers
    redis+lua脚本 分布式锁初步学习
    redis中通用命令(key)和补充
    redis基本数据类型有序集合(zset)学习笔记
    redis基本数据结构集合(set)学习笔记
    大道至简读后感
    第一周
    《大道至简》读后感
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7097643.html
Copyright © 2020-2023  润新知