首页 > 代码库 > 对SqlHelper的理解

对SqlHelper的理解

简介

       Sqlhelper 是用来避免重复输入连接数据库代码的类,封装后只需要给类中的方法传入一些参数如数据库连接字符串,SQL参数等就可以访问数据库了。因为我们要声明该类不能被继承或实例化,所以我们要通过静态方法来封装数据访问功能。静态方法为类所有,可以通过对象来使用,也可以通过类来使用。但一般提倡通过类名来使用,应为静态方法只要定义了类,不必建立类的实例就可使用。


机制

       上面说了SqlHelper的简介,接下来介绍它具体的运行机制。首先和普通连接数据库的步骤一样,要先定义Connection对象,给它相应的连接字符串,连接字符串在开发项目时我们一般都是用反射来配置,然后用Command对象来对数据库执行操作。其实SqlHelper类中的几个方法就是command对象的几个方法,根据需求,我们一般用两个,一个是执行增删改的ExecuteNonQuery()和执行查询的ExecuteReader()

              ExecuteNonQuery()的返回值为int型,返回受影响的行数

              ExecuteReader()返回的是一个结果集DataTable,它是一个网络虚拟表。

       根据项目需要有时还会用到ExecuteScalarExecuteXmlReader等方法。

       同时还会用到command的一些参数对象及其方法:

              SqlParameter:是Sqlcommand的一个参数对象

              AddRange:添加多个SqlParameter

              CommandText:获取或设置要对数据源执行的TransactSQL语句或存储过程

              CommandType:获取或设置一个值,该值指示如何解释CommandText属性

       我们通常把这些方法分为有参和无参两种情况

 

代码

Imports System.Data.SqlClient
Imports System.Configuration

Public Class sqlHelper
    '有参数的增、删、改操作
    Public Function ExecuteNoQuery(cmdText As String, cmdType As CommandType, paras As SqlParameter()) As Integer
        Dim ConnStr As String = System.Configuration.ConfigurationManager.AppSettings("ConnStr")
        Dim conn As SqlConnection = New SqlConnection(ConnStr)
        '定义一个命令对象
        Dim cmd As New SqlCommand
        cmd = New SqlCommand(cmdText, conn)     '或用cmd =conn.createcommand()
        'cmd.Parameters.AddRange(paras)
        cmd.Parameters.AddRange(paras)       '添加参数
        Dim res As Integer

        Try
            '打开数据库
            If conn.State = ConnectionState.Closed Then
                conn.Open()
            End If
            res = cmd.ExecuteNonQuery()
        Catch ex As Exception
            MsgBox(ex.Message, "数据库打开错误")
        Finally
            '关闭数据库
            If conn.State = ConnectionState.Open Then
                conn.Close()
            End If
        End Try
        Return res



    End Function

    '无参数的增删改操作
    Public Shared Function ExecuteNoQuery(cmdText As String, cmdType As CommandType) As Integer
        Dim ConnStr As String = System.Configuration.ConfigurationManager.AppSettings("ConnStr")
        Dim conn As SqlConnection = New SqlConnection(ConnStr)

        Dim cmd As New SqlCommand
        cmd.CommandType = cmdType
        cmd = New SqlCommand(cmdText, conn)
        Dim res As Integer
        '不加参数
        Try
            If conn.State = ConnectionState.Closed Then
                conn.Open()
            End If
            res = cmd.ExecuteNonQuery()
        Catch ex As Exception
            MsgBox(ex.Message, "数据库操作")

        Finally
            '关闭数据库
            If conn.State = ConnectionState.Open Then
                conn.Close()
            End If


        End Try
        '返回受影响的行数
        Return res
    End Function

    '有参数的查询操作
    Public Function GetDataTable(ByVal cmdTxt As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As DataTable
        Dim strConnStr As String = System.Configuration.ConfigurationManager.AppSettings("ConnStr")
        '定义一个数据库连接对象
        Dim conn As SqlConnection = New SqlConnection(strConnStr)
        '定义一个命令对象
        Dim cmd As New SqlCommand
        Dim adataset As DataSet
        '定义一个适配器对象
        Dim adaptor As SqlDataAdapter
        cmd = New SqlCommand(cmdTxt, conn)
        adaptor = New SqlDataAdapter(cmd)
        adataset = New DataSet
        cmd.Parameters.AddRange(paras)

        Try
            If conn.State = ConnectionState.Closed Then
                conn.Open()
            End If
            adaptor.Fill(adataset)  '填充数据集
            'Return adataset.Tables()

        Catch ex As Exception
            MsgBox(ex.Message, , "数据库打开错误")
        Finally
            '关闭数据库连接
            If conn.State = ConnectionState.Open Then
                conn.Close()
            End If
        End Try

        Return adataset.Tables(0)

    End Function

    '无参数的查询
    Public Function GetDataTable(ByVal cmdTxt As String, ByVal cmdType As CommandType) As DataTable
        Dim strConnStr As String = System.Configuration.ConfigurationManager.AppSettings("ConnStr")
        Dim conn As SqlConnection = New SqlConnection(strConnStr)
        Dim cmd As New SqlCommand
        Dim adataset As DataSet
        Dim adaptor As SqlDataAdapter
        cmd = New SqlCommand(cmdTxt, conn)
        cmd.CommandType = cmdType
        adaptor = New SqlDataAdapter(cmd)
        adataset = New DataSet
        Try
            If conn.State = ConnectionState.Closed Then
                conn.Open()
            End If
            adaptor.Fill(adataset)

        Catch ex As Exception
            MsgBox(ex.Message, , "数据库打开")
        Finally
            If conn.State = ConnectionState.Open Then
                conn.Close()
            End If
        End Try
        Return adataset.Tables(0)
    End Function
End Class


总结

        在面向对象的学习中,我们知道当遇到两个以上的需求或用到两次以上的方法时我们就要考虑把它封装起来。SqlHelper类就是体现了封装的思想,它的提出是给了我们一个思路,其代码是根据具体情况具体分析的,切莫教条主义。

对SqlHelper的理解