vb.net之SqlHelper的编写与应用

前端之家收集整理的这篇文章主要介绍了vb.net之SqlHelper的编写与应用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

上次文章中说到。对于一个项目来说,sqlHelper是一个很重要的类。

在正在构造的机房收费系统中。有大量的操作数据库的操作。如今,把重复的代码全部拿出来,就形成了sqlHelper类。这个sqlHelper执行参数化查询至于使用,只需要提供相应的sql语句和参数。就可以执行数据库的操作了。

实现声明一下啊。这个例子 我也不知道能不能用在机房收费系统上。刚学完设计模式,突发奇想在数据库链接上,加上了一个单例模式。如果出现什么不显示的情况,请联系我。

接下来看一下,sqlHelper是如何写的。以及如何在D层中使用的。

Imports System.Data.sqlClient
Imports System.Configuration

Public NotInheritable Class sqlHelper
    ''' <summary>
    ''' 定义连接对象 和 cmd 命令
    ''' </summary>
    ''' <remarks></remarks>
    Dim Connsql As sqlConnection    '连接字符串
    Dim cmdsql As New sqlCommand

    '创建链接,使用自己的链接方式(也算是一个单例模式吧)
    Public Sub New()
        Connsql = sqlConnectionDAL.GetConn      '使用自己的sqlconnection
    End Sub

    ''' <summary>
    ''' 带参数的查询  
    ''' </summary>
    ''' <param name="strText">sql语句</param>
    ''' <param name="cmdType">查询类型</param>
    ''' <param name="sqlParams">句子中的参数</param>
    ''' <returns></returns>向数据库 提取 指定的数据
    ''' <remarks></remarks>
    Public Function Query(ByVal strText As String,ByVal cmdType As CommandType,ByVal sqlParams As sqlParameter()) As DataTable
        Dim sqlAdapater As sqlDataAdapter
        Dim dtsql As New DataTable
        Dim dssql As New DataSet

        cmdsql.CommandText = strText
        cmdsql.CommandType = cmdType
        cmdsql.Connection = Connsql

        cmdsql.Parameters.AddRange(sqlParams)
        sqlAdapater = New sqlDataAdapter(cmdsql)

        Try
            sqlAdapater.Fill(dssql)
            dtsql = dssql.Tables(0)
            cmdsql.Parameters.Clear()
        Catch ex As Exception
            MsgBox(ex.Message,CType(vbOKOnly + MsgBoxStyle.Exclamation,MsgBoxStyle),"警告")
        End Try

        Return dtsql
    End Function

    ''' <summary>
    ''' 无参数的查询
    ''' </summary>
    ''' <param name="strText">sql语句</param>
    ''' <param name="cmdType">查询类型</param>
    ''' <returns></returns>主要是向数据库中取数据,用来使用
    ''' <remarks></remarks>
    Public Function QueryNo(ByVal strText As String,ByVal cmdType As CommandType) As DataTable
        Dim sqlAdapater As sqlDataAdapter
        Dim dtsql As New DataTable
        Dim dssql As New DataSet

        cmdsql.CommandText = strText
        cmdsql.CommandType = cmdType
        cmdsql.Connection = Connsql

        '添加参数
        sqlAdapater = New sqlDataAdapter(cmdsql)

        Try
            sqlAdapater.Fill(dssql)
            dtsql = dssql.Tables(0)
            cmdsql.Parameters.Clear()
        Catch ex As Exception
            MsgBox(ex.Message,"警告")
        End Try

        Return dtsql
    End Function

    ''' <summary>
    ''' 带参数的增删改
    ''' </summary>
    ''' <param name="strText">sql语句</param>
    ''' <param name="cmdType">查询类型:有参数的增删改</param>
    ''' <param name="sqlParams">参数</param>
    ''' <returns></returns>执行成功返回true
    ''' <remarks></remarks>
    Public Function UpdDelAlter(ByVal strText As String,ByVal sqlParams As sqlParameter()) As Boolean
        cmdsql.CommandText = strText
        cmdsql.CommandType = cmdType
        cmdsql.Connection = Connsql

        '添加参数
        cmdsql.Parameters.AddRange(sqlParams)

        Dim flag As Boolean

        Try
            flag = cmdsql.ExecuteNonQuery
            cmdsql.Parameters.Clear()
            Return flag
        Catch ex As Exception
            Return False
        End Try
    End Function
End Class

在上面的例子中,还缺少那个 单例模式。如果感觉不合适的,请自行编写一个数据库的连接方式就可以了。

Imports System.Data.sqlClient
''' <summary>
''' 连接字符串 数据库  使用单例模式
''' </summary>
''' <remarks></remarks>赵崇 14-5-17
Public Class sqlConnectionDAL

    ''' <summary>
    ''' 定义一个连线字符串
    ''' </summary>
    ''' <remarks></remarks>赵崇 14-5-17
    Private Shared ReadOnly strLink As String = System.Configuration.ConfigurationManager.AppSettings("ConnStr")

    Public Shared conn As sqlConnection = Nothing

    '创建一个静态 只读进程 辅助对象
    Public Shared ReadOnly syncRoot As New Object


    ''' <summary>
    ''' 私有构造函数,外部代码不能使用
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub New()
    End Sub

    Public Shared ReadOnly Property GetConn() As sqlConnection
        Get
            If conn Is Nothing Then
                SyncLock syncRoot       '锁,确保只有一个链接可使用
                    If conn Is Nothing Then
                        conn = New sqlConnection(strLink)
                        conn.Open()
                    End If
                End SyncLock
            ElseIf conn.State = ConnectionState.Closed Then
                conn.Open()
            ElseIf conn.State = ConnectionState.Broken Then
                conn.Close()
                conn.Open()
            End If
            Return conn
        End Get
    End Property
End Class


对于以上,项目的sqlHelper就编写完成了。只需要使用就可以了。至于使用。在D层的实现,这里只写一个例子。

咱们就写一个看看吧。

查询表:(不需要参数,如需使用 直接替换sql语句)

    ''' <summary>
    ''' 获取用户表中的用户级别信息
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Function GetTable() As DataTable Implements IDAL.IUser.GetUserTable
        Dim strsql As String = "Select distinct Level as [用户级别] from User_Info Des"

        Dim helper As New sqlHelper

        Dim dtUser = helper.QueryNo(strsql,CommandType.Text)

        Return dtUser
    End Function

删除用户表:(更新 修改 等等 只需要替换相应的sql语句 和参数 即可实现)

    ''' <summary>
    ''' 删除用户
    ''' </summary>
    ''' <param name="user">用户信息</param>
    ''' <returns></returns>返回true表示删除成功,返回false表示删除失败
    ''' <remarks></remarks>赵崇 14-5-21
    Public Function DeleteUser(ByVal user As UserEntity) As Boolean Implements IDAL.IUser.DeleteUser
        Dim strsql As String
        strsql = "Delete from User_Info where UserID=@UserID"
        Dim helper As New sqlHelper
        Dim sqlparameter As sqlParameter() = {New sqlParameter("@UserID",user.UserID)}

        Dim flag As Boolean
        flag = helper.UpdDelAlter(strsql,CommandType.Text,sqlparameter)
        Return flag
    End Function


通过上面的例子,你会发现,在于数据库进行操作的时候,仅仅提供sql语句 加 参数。就可以达到自己的目的。sqlHelper类,一次编写,到处使用。大量的节省代码

对于使用三层架构的程序,编写代码的时候,脑子里只有 对象及其方法。在U层写代码的时候,不需要考虑B层的实现过程,只知道B层的返回结果就可以了。

猜你在找的VB相关文章