开发者社区> eddie小英俊> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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, CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告")
        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 cmdType As CommandType, 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层的返回结果就能够了。

 


版权声明:本文博客原创文章。博客,未经同意,不得转载。








本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4746818.html,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
VB.net视频总结—
VB.net视频总结—
6 0
VB.net视频总结二
VB.net视频总结二
10 0
SpringCloud微服务实战——搭建企业级开发框架(三十一):自定义MybatisPlus代码生成器实现前后端代码自动生成
理想的情况下,代码生成可以节省很多重复且没有技术含量的工作量,并且代码生成可以按照统一的代码规范和格式来生成代码,给日常的代码开发提供很大的帮助。但是,代码生成也有其局限性,当牵涉到复杂的业务逻辑时,简单的代码生成功能无法解决。   目前市面上的代码生成器层出不穷,大多数的原理是基于已有的代码逻辑模板,按照一定的规则来生成CRUD代码。至于更为复杂的代码生成大家都在人工智能领域探索
287 0
机房收费系统(VB.NET)——存储过程实战
最初接触存储过程是在耿建玲老师的视频里,当初只是草草过了一遍,只是有了个印象,知道了这个名词;大二时也有SqlServer数据库这门课,不过老师没讲,自己也没看;真正对存储过程的了解来自于自学考试中的《数据库系统原理》,在考试中,知道存储过程是干嘛的,在纸上怎么写,但从来没有在DBMS中亲手敲过。于是机房收费系统给了我这个机会。 在这里不再过多叙述关于存储过程德基本知识,只写一下在机房收费系统这个小项目中是如何用到存储过程的。
74 0
.NET简谈静态事件链
在我们日常开发过程中经常会遇到多个类实例之间的关联,不管是B/S还是C/S的项目,在对实例的使用是一样的;只不过C/S的项目比较好控制,不管是UI层的对象都能很好的控制,包括继承、重写等等;而在B/S里面可能不太方便,由于B/S本身的特点,不能暴露内部太多的继承关系,以免不小心破坏类的封闭性;我这篇...
572 0
将图像转成HTML文件,VB.net源代码
上次发过一个软件,见下文http://www.cnblogs.com/aowind/archive/2005/03/05/113429.html其软件的功能就是将一个图像转成HTML文件,就是用一些自定义的数字通过不同的色彩来表现出这个图像其效果如下:经过小弟研究了一下,在vb.
738 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载