【机房重构】sqlhelper

什么是sqlhelper

    SqlHelper是一个基于.NET Framework的数据库操作组件。组件中包含数据库操作方法。SqlHelper用于简化你重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等。SqlHelper封装过后通常是只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了,很方便。

    

为什么要用sqlhelper

    简单的说就是简化操作,提高效率。

    我们都知道D层用于执行与数据库有关的操作。每当执行与数据库有关的操作时,就需要执行一遍数据库操作的语言,然后对其进行增、删、改、查,这时就会出现很多重复或者说类似的代码,会出现冗余,也容易产生错误。

    为了提高效率,我们把这些数据库操作语言封装成一个类,再对其进行操作。既使D层减负,也使代码减少耦合,程序的执行更加高效。


怎么用sqlhelper

(一)基本介绍

1.数据库操作包括增删改查4类,简单点,可以划分成两类:查(查)、更新(增删改)。

     据此,sqlhelper类的内容主要分为4类:

1)带参数的更新(增删改)语句或存储过程     ---------------返回受影响行数

2)不带参数的更新(增删改)语句或存储过程   ---------------返回受影响行数

3)带参数的查询语句或存储过程               ---------------返回结果集

4)不带参数的查询语句或存储过程             ---------------返回结果集

2.该类中实现的方法包括:

(1)ExecuteNonQuery:用于执行不返回任何行或值的命令。这些命令通常用于执行数据库更新,但也可用于返回存储过程的输出参数。             (针对更新操作)
(2)ExecuteReader:用于返回SqlDataReader对象,该对象包含由某一命令返回的结果集。                                                    (针对查询操作)
(3)ExecuteDataset:返回DataSet对象,该对象包含由某一命令返回的结果集。


(二)内容详解

1.带参数VS不带参数

    带参数表示有传入值,不带参数表示无传入值。

    在进行数据库操作时,我们需要得到的信息无非分为——全部信息、部分信息。当我们需要一张表的全部信息时,不需要参数,但如果是部分信息,此时要用到查询条件,也就需要参数。

2.返回值

    就是指方法(函数)结束后需要返回给调用者的值。我们定义一种方法,肯定是想得到相应的结果,返回值就是给出我们一个结果。

    比如,我提出一个问题“你今天吃早饭了吗?”“吃”或者“没吃”是回答也是返回值。

3.返回受影响行数VS返回

    返回受影响行数和返回表都是返回值的子类。

    当我们进行对数据库的更新(增删改)操作时,需返回受影响行数,反映信息是否被修改。此时,如果受影响行数大于0,说明可以查到数据,信息更新成功,否则结果相反。

    当我们进行对数据库的查询操作时,需要返回DataTable虚拟表(它是一个临时保存数据的网格虚拟表),如果表的行数大于0,说明表中存在数据,可以查到记录,否则说明无法查到记录。


(三)代码

配置文件
	<appSettings>
		 <add key="sqlConnectStr"  value="Server=.;Database=charge_sys;User ID=sa;Password=123456"/>
         <add key="DB"  value="DAL"/>		
	</appSettings>

sqlhelper类

Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Data
Imports System.Reflection
Public Class sqlhelper
    '定义全局变量变量,获得数据库的连接字符串                                                            
    Private Shared ReadOnly strConnection As String = ConfigurationManager.AppSettings("sqlConnectStr")
    '定义全局变量,设置连接      
    Shared conn As SqlConnection = New SqlConnection(strConnection)
    '定义全局cmd命令      
    Shared cmd As New SqlCommand
    ''' <summary>      
    ''' 执行非查询操作(增删改)有参数     
    ''' </summary>      
    ''' <param name="cmdText">执行增删改查SQL语句或者存储过程</param>      
    ''' <param name="cmdType">命令类型文本或者是存储过程</param>      
    ''' <param name="paras">参数数组,无法确认有多少参数</param>      
    ''' <returns></returns>      
    ''' <remarks></remarks>
    Public Shared Function ExecuteNoQuery(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As Integer
        '将传入的值,分别为cmd的属性赋值    
        Dim result As Integer   '定义变量用来存放执行的结果  
        cmd.Parameters.AddRange(paras)   '将参数传入      
        cmd.CommandType = cmdType            '设置一个值,解释cmdText      
        cmd.Connection = conn                '设置连接,全局变量 
        cmd.CommandText = cmdText            '设置查询的语句      

        Try
            conn.Open()                      '打开连接      
            result = cmd.ExecuteNonQuery()     '执行增删改操作      
            cmd.Parameters.Clear()           '清除参数      
        Catch ex As Exception
            MsgBox(ex.Message, , "数据库操作")
        Finally
            '关闭数据连接  
            Call CloseConn(conn)
            Call CloseCmd(cmd)
        End Try
        Return result        '返回受影响的行数  
    End Function
    ''' <summary>      
    ''' 执行增删改三个操作,(无参)      
    ''' </summary>      
    ''' <param name="cmdText">执行增删改查SQL语句或者存储过程</param>      
    ''' <param name="cmdType">命令类型文本或者是存储过程</param>      
    ''' <returns>Interger,受影响的行数</returns>     
    Public Shared Function ExecAddDelUpdateNo(ByVal cmdText As String, ByVal cmdType As CommandType) As Integer
        '为要执行的命令cmd赋值      
        cmd.CommandText = cmdText
        cmd.CommandType = cmdType
        cmd.Connection = conn
        Dim result As Integer

        '执行操作      
        Try
            conn.Open()
            result = cmd.ExecuteNonQuery()
        Catch ex As Exception
            MsgBox(ex.Message, , "数据库操作")
        Finally
            Call CloseConn(conn)
            Call CloseCmd(cmd)
        End Try
        Return result          '返回受影响的行数
    End Function
    '''' <summary>    
    '''' 执行查询的操作,(有参),参数不限      
    '''' </summary>      
    ''' <param name="cmdText">执行增删改SQL语句或存储过程</param>      
    ''' <param name="cmdType">文本类型或存储过程</param>      
    ''' <param name="paras">传入的参数</param>      
    ''' <returns>返回为DataTable</returns>      
    ''' <remarks></remarks>      
    Public Shared Function GetDataTable(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As DataTable

        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(paras)  '参数添加      
        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(ex.Message, , "数据库操作")
        Finally                            '销毁cmd释放资源     
            Call CloseCmd(cmd)
        End Try
        Return dt
    End Function
    ''' <summary>      
    ''' 执行查询的操作,(无参)      
    ''' </summary>      
    ''' <param name="cmdText">执行的增删该的SQL语句或存储过程</param>      
    ''' <param name="cmdType">判断Sql语句的类型,一般都不是存储过程</param>      
    ''' <returns>dataTable,查询到的表格</returns>      
    ''' <remarks></remarks>      
    Public Shared Function GetDataTable(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable
        Dim sqlAdapter As SqlDataAdapter
        Dim ds As New DataSet
        '还是给cmd赋值      
        cmd.CommandText = cmdText
        cmd.CommandType = cmdType
        cmd.Connection = conn
        sqlAdapter = New SqlDataAdapter(cmd)  '实例化adapter      
        Try
            sqlAdapter.Fill(ds)           '用adapter将dataSet填充       
            Return ds.Tables(0)             'datatable为dataSet的第一个表      
        Catch ex As Exception
            Return Nothing
        Finally                            '销毁cmd,释放资源      
            Call CloseCmd(cmd)
        End Try
    End Function
    ''' <summary>      
    ''' 关闭连接      
    ''' </summary>      
    ''' <param name="conn">需要关闭的连接</param>      
    ''' <remarks></remarks>      
    Public Shared 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 Shared Sub CloseCmd(ByVal cmd As SqlCommand)
        If Not IsNothing(cmd) Then          '如果cmd命令存在      
            cmd.Dispose()                   '销毁      
            cmd = Nothing
        End If
    End Sub
End Class


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 29
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值