對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類就是體現了封裝的思想,它的提出是給了我們一個思路,其代碼是根據具體情況具體分析的,切莫教條主義。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章