首页 > 代码库 > 姗姗来迟的SQLHelper

姗姗来迟的SQLHelper


    机房收费系统个人重构版敲完登陆系统之后往后敲了几个窗体,对于那些数据库连接SqlConnenctionSqlConnamd等经常敲重复的代码,之前也看过其他人的博客,这个东西不用还真不行。

 

    SqlHelper是什么?

    SqlHelper是一个基于·NETFramework的数据库操作组件。组件中包含数据库操作方法。

    SqlHelper的作用?

    SqlHelper用于简化你重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等。SqlHelper封装过后通常是只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了。

机房个人重构Sqlhelper代码:

’****************************************************
’文件名:SqlHelper
’命名空间:DAL
'内容:使用SqlHelper,提供较高的数据访问性
’功能:
’文件关系:
’作者:赵亚盟
’小组:XXX
’生成日期:2014-07-17 14:44:38
’版本号:V1.0.0.0
’修改日志:
’版本说明:
'****************************************************
Imports System.Data
Imports System.Data.SqlClient  'SQLServer的连接对象
Imports System.Configuration  '配置文件的引用 (管理器中也要引用)
'------------------------------------------------------------------------------------------------------------------------------------------------------------------
Public Class SqlHelper

    Dim Connstr As String = ConfigurationManager.AppSettings("Connstr") '配置文件
    Dim conn As New SqlConnection  '定义连接
    Dim cmd As New SqlCommand      '定义命令
    Public Sub New()
        conn = New SqlConnection(Connstr)
    End Sub
#Region "有参数的查询操作"

    ''' <summary>
    '''执行查询操作,有参数返回datatable类型
    ''' </summary>
    ''' <param name="cmdText">需要执行语句,可以是Sql语句也可以是存储过程</param>
    ''' <param name="cmdType">判断Sql语句的类型,一般都不是存储过程</param>
    ''' <param name="paras">参数数组</param>
    ''' <returns>返回表</returns>
    ''' <remarks></remarks>
    Public Function GetDataTable(cmdText As String, cmdType As String, paras As SqlParameter()) As DataTable

        Dim adapter As New SqlDataAdapter
        Dim ds As New DataSet              '定义一个适配器对象
        Dim dt As New DataTable

        cmd.CommandText = cmdText          '设置查询语句
        cmd.CommandType = cmdType
        cmd.Connection = conn              '设置连接,全局变量
        cmd.Parameters.AddRange(paras)     '传入参数
        adapter = New SqlDataAdapter(cmd)  '实例化Adapter

        Try
            adapter.Fill(ds)               '用Adapter将Dataset填充
            dt = ds.Tables(0)              'datatable为DataSet的第一个表
            cmd.Parameters.Clear()         '清除参数
        Catch ex As Exception
            MsgBox("查询失败", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告")
        Finally
            Call CloseConn(conn)
            Call CloseCmd(cmd)             '销毁cmd
        End Try
        Return dt                          '返回受影响的行数

    End Function

#End Region

    '------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#Region "无参数的查询操作"
    ''' <summary>
    '''执行查询操作,无参数返回datatable类型
    ''' </summary>
    ''' <param name="cmdText">需要执行语句,可以是Sql语句也可以是存储过程</param>
    ''' <param name="cmdType">判断Sql语句的类型,一般都不是存储过程</param>
    ''' <returns>返回表</returns>
    ''' <remarks></remarks>
    Public Function GetDataTable(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable

        Dim adapter As New SqlDataAdapter
        Dim ds As New DataSet             '定义一个适配器对象
        Dim dt As New DataTable

        cmd.CommandText = cmdText         '将sql语句传给cmdsql
        cmd.CommandType = cmdType         '确定语句类型
        cmd.Connection = conn             '设置连接,全局变量
        adapter = New SqlDataAdapter(cmd) '实例化Adapter

        Try
            adapter.Fill(ds)              '用Adapter将Dataset填充
            dt = ds.Tables(0)             'datatable为DataSet的第一个表
        Catch ex As Exception
            MsgBox("查询失败", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告")
        Finally
            '销毁cmd
            Call CloseConn(conn)
            Call CloseCmd(cmd)
        End Try
        Return dt                         '返回受影响的行数

    End Function

#End Region
    '----------------------------------------------------------------------------------------------------------------------------------------------------------------------
#Region "有参数的增删改"
    ''' <summary>
    ''' ///执行有参数的增删改操作,有参数则返回Boolean类型,确认是否执行成功
    ''' </summary>
    ''' <param name="cmdText">需要执行语句,可以是Sql语句也可以是存储过程</param>
    ''' <param name="cmdType">判断Sql语句的类型,一般都不是存储过程</param>
    ''' <param name="paras">参数数组</param>
    ''' <returns>返回Boolean类型,成功返回true,否则返回false</returns>
    ''' <remarks></remarks>
    Public Function ExecuteNoQuery(cmdText As String, cmdType As CommandType, paras As SqlParameter()) As Boolean

        cmd.Parameters.AddRange(paras)   '传入参数
        cmd.CommandType = cmdType        '确定语句类型
        cmd.CommandText = cmdText        '设置查询语句
        cmd.Connection = conn            '设置连接,全局变量

        Try
            conn.Open() '打开连接
            Return cmd.ExecuteNonQuery() '执行增删改操作
            cmd.Parameters.Clear()       '清除参数
        Catch ex As Exception
            Return False                 '如果出现错误,则返回false
        Finally
            '关闭数据库
            Call CloseConn(conn)
            Call CloseCmd(cmd)
        End Try

    End Function

#End Region
    '------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#Region "无参数的增删改"
    ''' <summary>
    ''' ///执行增删改操作,无参返回Boolean型,确认是否执行成功
    ''' </summary>
    ''' <param name="cmdText">需要执行语句,可以是Sql语句也可以是存储过程</param>
    ''' <param name="cmdType">判断Sql语句的类型,一般都不是存储过程</param>
    ''' <returns>返回Boolean类型,成功返回true,否则返回false</returns>
    ''' <remarks></remarks>
    Public Function ExecuteNoQuery(cmdText As String, cmdType As CommandType) As Boolean

        cmd.CommandType = cmdType             '判断类型
        cmd.CommandText = cmdText             '设置查询语句
        cmd.Connection = conn                 '设置连接

        Try
            conn.Open()                       '打开连接
            Return cmd.ExecuteNonQuery()      '执行增删改操作
        Catch ex As Exception
            Return False                      '如果出现错误,则返回false
        Finally
            '关闭数据库
            Call CloseConn(conn)
            Call CloseCmd(cmd)
        End Try

    End Function

#End Region

    Public Sub CloseCmd(ByVal cmd As SqlCommand)
        '判断cmd命令是否存在,如果cmd命令不存在就销毁
        If Not IsNothing(cmd) Then
            cmd.Dispose()
            cmd = Nothing
        End If
    End Sub

    Public Sub CloseConn(ByVal conn As SqlConnection)
        '判断数据库连接对象状态是否是断开状态,,如果不是就断开
        If conn.State <> ConnectionState.Closed Then
            conn.Close()                               '关闭连接
        End If
    End Sub
End Class

在 SqlHelper 类中实现的方法包括:

     ExecuteNonQuery。用于执行(有参数或无参数的)不返回任何行或值的命令。这些命令通常用于执行数据库(增\删\改)更新,但也可用于返回存储过程的输出参数。

    ExecuteReader。此方法用于返回 SqlDataReader 对象,该对象包含由某一命令返回的结果集。

    ExecuteDataset。此方法返回DataSet 对象,该对象包含由某一命令返回的结果集。

 注意:在使用SqlHelper方法调用数据库存储过程时,需要获取存储过程的返回值,使用带有SSqlParameter[]参数的方法,Object[]参数的方法无法获取存储过程的返回值。