对SqlHelper的理解

简介

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

机制

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

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

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

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

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

SqlParameter:是Sqlcommand的一个参数对象

AddRange:添加多个SqlParameter。

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

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类就是体现了封装的思想,它的提出是给了我们一个思路,其代码是根据具体情况具体分析的,切莫教条主义。

时间: 2024-12-06 08:03:29

对SqlHelper的理解的相关文章

机房收费系统个人重构关于SQLHelper

近期在敲机房,对于SQLHelper也是心里有些怵,由于原来没用过,可是看了一些博客和资料后发现,假设不用这个类,会大大添加代码量,并且,事实上它并不新,它是一个有多个关于数据库增删改查操作的语句函数的类,使用这个类能够方便D层调用,对数据库的操作,我们无非就是增删改查,而函数就是有无參数,有无返回值,SQLHelper是个新词,只是我们却一直在用,仅仅是我们不这么叫,之所以叫SQLHelper,理所当然它是D层操作数据的助手, 在SQLHelper类中实现的方法包含: ExecuteNonQu

沙朗新闻发布系统--总结阶段()一个

牛腩视频看了有20集了,通过对这部分的学习,让自己对开发一个系统的过程有了一定的了解.尽管之前已经写过好几遍的开发文档.可是这次的真正实践给了自己更加深刻的印象. 我对前17讲的总结例如以下图: 视频开篇第一讲主要介绍的是我们开发这款系统的必备软件,主要是VS.数据库.绘图工具.浏览器等.当中在介绍火狐浏览器的时候.介绍了它的一个firebug插件,网上介绍:它集HTML查看和编辑.Javascript控制台.网络状况监视器于一体,是开发JavaScript.CSS.HTML和Ajax的得力助手

牛腩新闻发布系统--阶段总结(一)

牛腩视频看了有20集了,通过对这部分的学习,让自己对开发一个系统的过程有了一定的了解.虽然之前已经写过好几遍的开发文档,但是这次的真正实践给了自己更加深刻的印象. 我对前17讲的总结如下图: 视频开篇第一讲主要介绍的是我们开发这款系统的必备软件,主要是VS.数据库.画图工具.浏览器等,其中在介绍火狐浏览器的时候,介绍了它的一个firebug插件,网上介绍:它集HTML查看和编辑.Javascript控制台.网络状况监视器于一体,是开发JavaScript.CSS.HTML和Ajax的得力助手.但

分装一个SqlHelper类方便使用,着重理解params Sql

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; using System.Configuration; using _17

分装一个SqlHelper类方便使用,着重理解params SqlParameters[] commandParamters

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; using System.Configuration; using _17

机房重构 之 SqlHelper

机房收费开始一段时间了,刚开始也是敲了一段时间,发现D层访问数据库出现了大量的重复代码,每个D层类都要 单独访问数据库.发现问题,咱们就解决问题,查阅前人的博客,发现了一个SqlHelper类,运用一下,果然好用,省 去了大量时间去写重复的代码. 小面对SQL中的一些类方法进行简单的介绍. 1.SQLHelper.ExecuteNonQuery    作用:用于执行语句 2. SQLHelper.ExecuteScalar       作用:用于获取单字段值语句 3. SQLHelper.Exe

机房重构包图(从三层+实体到三层+实体+外观+工厂+接口+SQLHelper)

刚刚开始接触三层的时候,我只做了两个登录小窗体的例子.画了简单的包图,可以说,为后面机房重构留下了大量的工作(因为三层理解没有深度,也没有理解出自己的东西).不过,欠下的总要还的.在做机房重构的时候,问题出现了.如果只用三层+实体,我能做出来,但是,要求重构不能只用三层+实体,那么,就要好好分析一下了. 首先说说三层+实体:就是表现层(U层)直接调用业务逻辑层(B层)的逻辑,业务逻辑层在直接访问数据层(D层),在把数据返回到B层后返回到U层.首先,只用三层+实体做程序时,灵活性不够高.如果想换数

连接数据库的抽象SQLHelper

在这个大数据的今天,我们无时无刻不再对数据进行着操作,即使一个简单的小系统,也会有10张表左右,更别说如果我们在面对一个大的项目的时候,上百张表是常有的事情,如果我们对每一张表都实现一个简单的操作,那么我们就意味着要连接上百次数据库. 那么如果我们是第一次连接数据库,我想大家会这么写. Imports System.Data.SqlClient Public Class UserDB '数据库连接语句 Dim str As String = "Data Source=localhost;Init

SQLHelper重构——【牛腩新闻发布系统】

一开始学习机房收费系统的时候,对数据库助手类的抽象和封装,理解的还不是很深刻.再次在牛腩新闻发布系统中看到SQLHelper的重构,感觉对SQLHelper抽象过程印象深刻了许多. 下面简单介绍一下ADO(ActiveX Data Object),首先通过Connection建立与服务器的联接,然后通过Command执行命令,最后通过Recordset对象来操作和查看查询结果.Parameters是Command对象的参数信息,Filed通过Recordset使用,它提供了相应的字段信息.Err