SQLhelper实例解析

本文介绍了SQLHelper的概念和用途,它是一个基于.NET Framework的数据库操作组件,用于简化数据库的增删改查操作。作者探讨了SQLHelper是自定义类还是VS内置,并解释了其实质是对ADO.NET七个对象的封装。同时,文章提到了SqlDataAdapter的作用,并分享了学习SQLHelper带来的收获与不足,指出需要通过实践进一步加深理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


思维导图


认识历程

        开始听到有人说sqlhelper类,sqlhelper层,看其他人的总结博客大部分都在说写一个sqlhelper封装了增删改查的数据操作,减少了代码量,大大方便了数据库操作,很好用,然后百度后有专门的百度百科进行讲解:SqlHelper是一个基于.NET Framework的数据库操作组件。组件中包含数据库操作方法。SqlHelper用于简化你重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等。SqlHelper 封装过后通常是只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了,很方便,看到这个解释后便去找这个组件结果没有找到sqlhelper到底是自己写出来的一个呢还是系统自带的呢sqlhelper到底是一个类还是一层,应该放在哪解决这两个问题最好的办法就是把巨人的思想结晶先拿过来,在实践中去体会其中的奥妙,现在的理解:

        sqlhelper即sql+helper合成,我们在编程的起名中有一个基本的规定就是见名知义,sql语句是用来对数据库进行增删改查的语句,而查询与增删改无非两类,一个是有参数的,一个是无参数的,但每一次和数据库打交道的语句是一样的,怎样能减少重复的代码,提高效率呢,helper帮助者sqlhelper就起到了这个作用,帮助我们减少重复的sql语句的敲写。

        vs自身带的还是自己编写的呢,VS中我们用到的大多数对象也不是凭空生成的,而是开发人员根据使用频率将一些常用的进行了封装,所以我们只用进行引用就能直接使用,sqlhelper目前还是我们自己进行封装的一个类,即自己写四个方法就可以了,这四个方法就是有参和无参的增删改查,网上也有一些封装好了的sqlhelper,也可以引用,感觉不如自己写方便

sqlhelper首先是一个类,剩下的就要看把它放到什么位置上了,所以sqlhelper算不算一层,就看自己的设计逻辑了

一探究竟:

<strong><span style="font-size:18px;"></pre><pre name="code" class="vb"><strong><span style="font-size:18px;">Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
'************************************************* 
'作者:李建敏
'说明:封装增删改查的操作,在DAL层之间调用即可
'创建日期:2016-2-14
'版本号:1.00
'**********************************************
Public Class sqlHelper
    '通过配置文件来进行数据库链接字符串的值传递
    Private ReadOnly strConnection As String = ConfigurationSettings.AppSettings("ConnStr")
    'sqlconnection表示一个可以到SqlServer数据库的打开的链接
    Dim conn As New SqlConnection(strConnection)
    'sqlcommand表示对SqlServer执行的一个T-sql语句或存储过程
    Dim cmd As New SqlCommand

    ''' <summary>
    ''' 执行增删改三个操作,(无参)返回值为Boolean类型,确认是否执行成功
    ''' </summary>
    '''<param name="cmdText">需要执行语句,一般是Sql语句,也有存储过程</param>
    ''' <returns>Interger,受影响的行数</returns>
    '''<remarks></remarks>
    Public Function ExecAddDelUpdateNo(ByVal cmdText As String, ByVal cmdType As CommandType) As Boolean
        '将该函数形参赋给cmd命令已达到预期的功能
        cmd.CommandText = cmdText   '将接收到的sql语句传递进来
        cmd.CommandType = cmdType    '设置sql语句如何解释,有三种默认文本,表和存储过程
        cmd.Connection = conn         '进行数据库的链接

        Try
            conn.Open()     '打开数据库链接
            Return cmd.ExecuteNonQuery
        Catch ex As Exception
            MsgBox(ex.Message, "数据库操作")
            Return False
        Finally
            Call CloseConn(conn)  '调用一个过程来关闭数据库链接,不然会进行报错
            Call CloseCmd(cmd)
        End Try

    End Function

    ''' <summary>
    ''' 执行增删改三个操作,(有参)返回值为Boolean类型,确认是否执行成功
    ''' </summary>
    '''<param name="cmdText">需要执行语句,一般是Sql语句,也有存储过程</param>
    ''' <param name="paras">参数数组,无法确认有多少参数</param>
    ''' <returns></returns>
    '''<remarks>2016-2-14 21:47:15</remarks>
    Public Function ExecAddDelUpdate(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As Boolean
        cmd.Parameters.AddRange(paras)
        cmd.CommandText = cmdText
        cmd.CommandType = cmdType
        cmd.Connection = conn
        Try
            conn.Open()
            Return cmd.ExecuteNonQuery()
            cmd.Parameters.Clear()

        Catch ex As Exception
            MsgBox(ex.Message, , "数据库操作")
            Return False
        Finally
            Call CloseConn(conn)
            Call CloseCmd(cmd)
        End Try

    End Function

    ''' <summary>
    ''' 执行查询操作,(有参),返回值为datatable类型,参数不限
    ''' </summary>
    '''<param name="cmdText">需要执行语句,一般是Sql语句,也有存储过程</param>
    '''<param name="paras">传入的参数</param> 
    ''' <returns></returns>
    '''<remarks></remarks>
    Public Function Execselect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As DataTable
        'sqldataadapter用于更新sql数据库的一组命令和一个sql链接
        Dim sqladaper As New SqlDataAdapter
        '实例化一个表对象
        Dim dt As New DataTable
        Dim ds As New DataSet
        '将函数的形参传递给cmd以便达到相应的功能
        cmd.CommandText = cmdText   '传入接收到的sql语句
        cmd.CommandType = cmdType  <span style="font-family: Arial, Helvetica, sans-serif;"> '设置sql语句解释类型</span>

        cmd.Connection = conn
        cmd.Parameters.AddRange(paras)   '所需要的参数传入
        sqladaper = New SqlDataAdapter(cmd)   '目前还不是能很好的理解
        Try
            sqladaper.Fill(ds)
            dt = ds.Tables(0)   '从表的第0行开始搜索将符合的值赋值给dt
            cmd.Parameters.Clear()   '将参数清楚等待下一个参数的传入

        Catch ex As Exception
            MsgBox(ex.Message, , "数据库操作")
        Finally
            Call CloseCmd(cmd)

        End Try
        Return dt   '返回查询到的内容
    End Function

    ''' <summary>
    ''' 执行查询操作,(无参),返回值为datatable类型
    ''' </summary>
    '''<param name="cmdText">需要执行语句,一般是Sql语句,也有存储过程</param>
    '''<param name="cmdType">判断Sql语句的类型,一般都不是存储过程</param> 
    ''' <returns>dataTable,查询到的表格</returns>
    '''<remarks></remarks>
    Public Function ExecSelectNo(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable
        Dim sqlAdapter As SqlDataAdapter
        Dim dt As New DataTable
        Dim ds As New DataSet

        cmd.CommandText = cmdText
        cmd.CommandType = cmdType
        cmd.Connection = conn

        sqlAdapter = New SqlDataAdapter(cmd)
        Try
            sqlAdapter.Fill(ds)
            dt = ds.Tables(0)
        Catch ex As Exception
            MsgBox(ex.Message, , "数据库操作")
        Finally
            Call CloseCmd(cmd)
        End Try
        Return dt
    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</span></strong>
</span></strong>
<strong><span style="font-size:18px;"></pre><pre name="code" class="vb"></span></strong>

还记得那七个对象吗?

        第一次看见这段代码没有任何头绪,跟着注释敲了一遍,知道了大体它是如何工作,可以看出好像挺复杂,其实就是四个函数然后,在D层传进其所需要的cmdText,cmdType,sqlparams即可,它是如何具体工作的就不懂了,然而我们在仔细一分析,就会发现这些东西似曾相识——ADO七个对象

        三个独立对象:Connection对象(用于数据库链接),Command对象(执行相关sql语句和存储过程),Recordset对象(获得记录集)

        四个非独立对象:Error对象(connection),parameter对象(command),Field对象(recordset),Property对象(connection,command,recordset,field)

        具体详解请见另一篇博客,大体是如何工作的就有一个微观的认识了

        在这中还有一个新接触的类SqlDataAdapter, DataSet和 SQL Server之间的桥接器,。SqlDataAdapter通过对数据源使用适当的Transact-SQL语句映射 Fill(它可填充DataSet中的数据以匹配数据源中的数据)和 Update(它可更改数据源中的数据以匹配 DataSet中的数据)来提供这一桥接。

具体的研究可参考:https://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqldataadapter.aspx

收获与不足

        sqlhelper是一个自己封装好在D层进行数据库访问时一个很好用的类吗,数据库一般不打开的话可读不可写,这四个方法的写法也是一个收获,复习了一下ADO七个对象,认识了一个新的类sqlDataAdaper,不足也基本就是收获的东西还只是停留在理论上,没有自己进行一个小例子去实践中在深入一点

SqlHelper源码及使用实例下载 SqlHelper 类实现详细信息 SqlHelper 类用于通过一组静态方法来封装数据访问功能。该类不能被继承或实例化,因此将其声明为包含专用构造函数的不可继承类。 在 SqlHelper 类中实现的每种方法都提供了一组一致的重载。这提供了一种很好的使用 SqlHelper 类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。在 SqlHelper 类中实现的方法包括: ExecuteNonQuery。此方法用于执行不返回任何行或值的命令。这些命令通常用于执行数据库更新,但也可用于返回存储过程的输出参数。 ExecuteReader。此方法用于返回 SqlDataReader 对象,该对象包含由某一命令返回的结果集。 ExecuteDataset。此方法返回 DataSet 对象,该对象包含由某一命令返回的结果集。 ExecuteScalar。此方法返回一个值。该值始终是该命令返回的第一行的第一列。 ExecuteXmlReader。此方法返回 FOR XML 查询的 XML 片段。 除了这些公共方法外,SqlHelper 类还包含一些专用函数,用于管理参数和准备要执行的命令。不管客户端调用什么样的方法实现,所有命令都通过 SqlCommand 对象来执行。在 SqlCommand 对象能够被执行之前,所有参数都必须添加到 Parameters 集合中,并且必须正确设置 Connection、CommandType、CommandText 和 Transaction 属性。SqlHelper 类中的专用函数主要用于提供一种一致的方式,以便向 SQL Server 数据库发出命令,而不考虑客户端应用程序调用的重载方法实现。SqlHelper 类中的专用实用程序函数包括: SqlHelper是非常方便的数据库操作函数,功能强大,使用起来非常简单,免去很多复杂的数据库操作的代码,在多层应用及面向对象开发中都有很多应用 SqlHelper源码带有详细的说明,示例中有原始的示例Sql语句 主要包括以下操作: 简单SQL语句(ExcuteSql) 带参数的简单SQL语句(ExcuteSQLParm) 简单存储过程 (ExcuteProc) 带参数的存储过程(ExcuteProcParm) 只返回一个字段 (ExcuteScalar) 返回数据集(ExcuteReader) 数据库中有示例数据及存储过程updateTable\updateTableByParm,大家可以自行修改测试
评论 55
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值