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,如需转载请自行联系原作者


相关文章
|
4月前
|
存储 Shell Linux
快速上手基于 BaGet 的脚本自动化构建 .net 应用打包
本文介绍了如何使用脚本自动化构建 `.net` 应用的 `nuget` 包并推送到指定服务仓库。首先概述了 `BaGet`——一个开源、轻量级且高性能的 `NuGet` 服务器,支持多种存储后端及配置选项。接着详细描述了 `BaGet` 的安装、配置及使用方法,并提供了 `PowerShell` 和 `Bash` 脚本实例,用于自动化推送 `.nupkg` 文件。最后总结了 `BaGet` 的优势及其在实际部署中的便捷性。
183 10
|
2月前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
2月前
|
JSON 算法 安全
JWT Bearer 认证在 .NET Core 中的应用
【10月更文挑战第30天】JWT(JSON Web Token)是一种开放标准,用于在各方之间安全传输信息。它由头部、载荷和签名三部分组成,用于在用户和服务器之间传递声明。JWT Bearer 认证是一种基于令牌的认证方式,客户端在请求头中包含 JWT 令牌,服务器验证令牌的有效性后授权用户访问资源。在 .NET Core 中,通过安装 `Microsoft.AspNetCore.Authentication.JwtBearer` 包并配置认证服务,可以实现 JWT Bearer 认证。具体步骤包括安装 NuGet 包、配置认证服务、启用认证中间件、生成 JWT 令牌以及在控制器中使用认证信息
126 2
|
4月前
|
数据采集 JSON API
.NET 3.5 中 HttpWebRequest 的核心用法及应用
【9月更文挑战第7天】在.NET 3.5环境下,HttpWebRequest 类是处理HTTP请求的一个核心组件,它封装了HTTP协议的细节,使得开发者可以方便地发送HTTP请求并接收响应。本文将详细介绍HttpWebRequest的核心用法及其实战应用。
171 6
|
5月前
|
前端开发 JavaScript 开发工具
跨域联姻:React.NET——.NET应用与React的完美融合,解锁前后端高效协作新姿势。
【8月更文挑战第28天】探索React.NET,这是将热门前端框架React与强大的.NET后端无缝集成的创新方案。React以其组件化和虚拟DOM技术著称,能构建高性能、可维护的用户界面;.NET则擅长企业级应用开发。React.NET作为桥梁,使.NET应用轻松采用React构建前端,并优化开发流程与性能。通过直接托管React组件,.NET应用简化了部署流程,同时支持服务器端渲染(SSR),提升首屏加载速度与SEO优化。
112 1
|
5月前
|
存储 缓存 安全
.NET 在金融行业的应用:高并发交易系统的构建与优化之路
【8月更文挑战第28天】在金融行业,交易系统需具备高并发处理、低延迟及高稳定性和安全性。利用.NET构建此类系统时,可采用异步编程提升并发能力,优化数据库访问以降低延迟,使用缓存减少数据库访问频率,借助分布式事务确保数据一致性,并加强安全性措施。通过综合优化,满足金融行业的严苛要求。
64 1
|
5月前
|
数据库 C# 开发者
WPF开发者必读:揭秘ADO.NET与Entity Framework数据库交互秘籍,轻松实现企业级应用!
【8月更文挑战第31天】在现代软件开发中,WPF 与数据库的交互对于构建企业级应用至关重要。本文介绍了如何利用 ADO.NET 和 Entity Framework 在 WPF 应用中访问和操作数据库。ADO.NET 是 .NET Framework 中用于访问各类数据库(如 SQL Server、MySQL 等)的类库;Entity Framework 则是一种 ORM 框架,支持面向对象的数据操作。文章通过示例展示了如何在 WPF 应用中集成这两种技术,提高开发效率。
78 0
|
5月前
|
开发者 API Windows
从怀旧到革新:看WinForms如何在保持向后兼容性的前提下,借助.NET新平台的力量实现自我进化与应用现代化,让经典桌面应用焕发第二春——我们的WinForms应用转型之路深度剖析
【8月更文挑战第31天】在Windows桌面应用开发中,Windows Forms(WinForms)依然是许多开发者的首选。尽管.NET Framework已演进至.NET 5 及更高版本,WinForms 仍作为核心组件保留,支持现有代码库的同时引入新特性。开发者可将项目迁移至.NET Core,享受性能提升和跨平台能力。迁移时需注意API变更,确保应用平稳过渡。通过自定义样式或第三方控件库,还可增强视觉效果。结合.NET新功能,WinForms 应用不仅能延续既有投资,还能焕发新生。 示例代码展示了如何在.NET Core中创建包含按钮和标签的基本窗口,实现简单的用户交互。
85 0
|
5月前
|
Java Spring 自然语言处理
Spring 框架里竟藏着神秘魔法?国际化与本地化的奇妙之旅等你来揭开谜底!
【8月更文挑战第31天】在软件开发中,国际化(I18N)与本地化(L10N)对于满足不同地区用户需求至关重要。Spring框架提供了强大支持,利用资源文件和`MessageSource`实现多语言文本管理。通过配置日期格式和货币符号,进一步完善本地化功能。合理应用这些特性,可显著提升应用的多地区适应性和用户体验。
53 0
|
5月前
|
开发者 C# Android开发
Xamarin 与 .NET:解锁现代化移动应用开发的超级武器——深入探讨C#与.NET框架如何赋能跨平台应用,实现高效编码与卓越性能
【8月更文挑战第31天】Xamarin 与 .NET 的结合为开发者提供了强大的平台,用于构建现代化移动应用。通过 C# 和 .NET 框架,Xamarin 可以实现一次编写、多平台运行,覆盖 iOS、Android 和 Windows。这种方式不仅节省了开发时间和成本,还保证了应用的一致性和高质量。Xamarin 是一个开源框架,专为跨平台移动应用开发设计,允许使用 C# 语言和 .NET 核心库构建原生应用,并访问各平台特定功能。微软维护的 Xamarin 是 Visual Studio 生态系统的一部分,极大地提高了开发效率。
94 0