首页 > 代码库 > SQLHlper的认识

SQLHlper的认识

        三层的学习中敲通登录的一条线的例子之后,要敲增删改查四条线的例子,所以会多次的访问到数据库,这其中对数据库的链接、打开都是一样的,只是会针对不同的表进行不同的操作,既然开始学习面向对象的思想,当让要对这些不变的要内容要进行打包,提高代码复用。所以就了解到了SQLHlper。这是对数据库连接以及操作的封装,我们在使用的时候只需要传入参数就能打开数据库,对相应的表进行操作。

       自己的SQLHlper借鉴了“巨人”的经验,同时也做了自己的改进。下面来看一下我的SQLHlper。

       首先对数据库的链接需要使用连接字符串和command命令

<span style="color:#009900;">'有参数的非查询操作    其中的参数CommandType 表示如何解释命令字符串</span>
Public Shared Function ExecuteNoQuery(ByVal cmdtxt As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As Integer
       <span style="color:#33ff33;"> </span><span style="color:#009900;">'定义链接的字符串,同时使用配置文件对ConnStr进行配置</span>
        Dim strConnStr As String = System.Configuration.ConfigurationManager.AppSettings("ConnStr")
        <span style="color:#009900;">'定义一个链接,他的参数是建立的链接字符串</span>
        Dim conn As SqlConnection = New SqlConnection(strConnStr)
       <span style="color:#009900;"> '定义一个命令,cmdtxt参数是sql语句,conn是对数据库的链接字符串</span>
        Dim cmd As SqlCommand= New SqlCommand(cmdtxt, conn)
        cmd.CommandType = cmdType  <span style="color:#009900;">'定义command命令的类型</span>
        cmd.Parameters.AddRange(paras)  <span style="color:#009900;">'添加参数</span>
Return NoSelectResult(conn, cmd) <span style="background-color: rgb(255, 255, 255);"><span style="color:#009900;">'这一部分是调用的抽象出来的函数</span></span>
End Function

<span style="color:#009900;">'执行有参数的查询</span>
    Public Shared Function GetDataTable(ByVal cmdTxt As String, cmdType As CommandType, ByVal paras As SqlParameter()) As DataTable
<pre name="code" class="vb">        <span style="color:#009900;">'定义使用程序配置的字符串,连接数据库</span>
Dim strConnStr As String = System.Configuration.ConfigurationManager.AppSettings("ConnStr")  
        Dim conn As SqlConnection = New SqlConnection(strConnStr) <span style="color:#009900;"> '定义一个新的sql连接字符串</span>
        Dim cmd As SqlCommand = New SqlCommand(cmdTxt, conn)   <span style="color:#009900;">'定义一个新的sqlCommand命令</span>
        Dim Adataset As New DataSet   <span style="color:#009900;">'定义一个DataSet可以用来储存查到的结果</span>
        Dim adaptor As SqlDataAdapter  <span style="color:#009900;"> '用将查到的结果填到DataSet中</span>
        Dim adatatable As New DataTable  <span style="color:#009900;"> '定义新的表,在DataSet中可以存放多张表</span>

        adaptor = New SqlDataAdapter(cmd)  <span style="color:#009900;">'得到cmd执行的结果</span>
        cmd.CommandType = cmdType       <span style="color:#009900;">'定义CommandType的类型</span>
        cmd.Parameters.AddRange(paras)   <span style="color:#009900;">'将要使用的参数添加到command命令中</span>

        Return SelectResult(conn, adaptor, Adataset)
End Function

        以上分别为有参数的非查询和查询的SQLHlper的函数,对应的没有参数非查询和查询的只需要将参数部分的定义去掉就好。

         如下是自己改进的部分,抽象出来判断数据库链接情况和执行command命令的,因为四种情况都会用到而且没有变化,所以可以把不变的这部分抽象出来。

<span style="color:#009900;">'查询的可以调用</span>
    Public Shared Function SelectResult(ByVal conn As SqlConnection, ByVal adaptor As SqlDataAdapter, ByVal Adataset As DataSet) As DataTable
          Try
            If conn.State = ConnectionState.Closed Then  <span style="color:#009900;">'判断链接的状态,如果是关闭的则打开</span>
                conn.Open()
                adaptor.Fill(Adataset)<span style="color:#009900;"> '然后将查询到的结果填入到定义好的DataSet中</span>
            End If
        Catch ex As Exception
            MsgBox(ex.Message, , "数据库操作")
        Finally
            If conn.State = ConnectionState.Open Then <span style="color:#009900;">'最后判断链接的状态,如果是开着的则关闭</span>
                conn.Close()
            End If
        End Try
        Return Adataset.Tables(0)  <span style="color:#009900;">'返回DataSet中的表</span>
End Function


   <span style="color:#009900;"> '非查询的可以调用</span>
    Public Shared Function NoSelectResult(ByVal conn As SqlConnection, ByVal cmd As SqlCommand) As Integer
        Dim res As Integer
        Try
            If conn.State = ConnectionState.Closed Then
                conn.Open()
            End If
            res = cmd.ExecuteNonQuery()  <span style="color:#009900;">'执行非查询动作,将受影响的行数返回</span>
        Catch ex As Exception
            MsgBox(ex.Message, , "数据库操作")
        Finally
            If conn.State = ConnectionState.Open Then
                conn.Close()
            End If
        End Try
        Return res
End Function

小结

        对于SQLHlper本身的代码部分的理解是没有难度的,通过SQLHlper能进一步的认识到面向对象的好处,并且自己也试着简单的抽象一些东西,SQLHlper好像是自己做好的一个零件,当它被需要时就可以直接的拿去使用,而它本身又可以由别的零件组成,不仅提高了代码的复用性,而且在做修改的时候可以修改需要修改的“零件”,解耦和的好处啊,还需要在实践中有更多的体会!!!





SQLHlper的认识