1. 程式人生 > >機房收費重構(四)-SqlHelper

機房收費重構(四)-SqlHelper

      最近由於學校專業課考試,導致上一篇的一些部落格沒有及時補上,讓讀者久等了,下面來說說關於DAL中一個模板吧-SqlHelper。

     在敲機房收費中,有好多都是重複的訪問資料庫這些操作,這樣我們可以將這些步驟抽象出來,命名為SqlHelper。在任何時候想到抽象和封裝。面向物件的思想深入骨髓。

     在SQLHelper中主要有四類,分別是:
        不帶引數的sql增刪改語句或儲存過程(無返回行或值)
        帶引數的sql增刪改語句或儲存過程(無返回行或值)
        不帶引數的sql查詢語句或儲存過程,返回DataTable結果集(有返回行或值)
        帶引數的sql查詢語句或儲存過程,返回DataTable結果集(有返回行或值)

     好了廢話少說,直接上程式碼模板了。

     1. 首先要通過配置檔案獲得字串

<span style="font-size:14px">Imports System.Data.SqlClient
Imports System.Configuration        '新增對配置檔案的引用
Public Class SqlHelper

    '通過配置檔案獲取連線字串並賦值給所宣告的變數strConnection
    Dim strConnection As String = ConfigurationManager.AppSettings("strSqlConnection")

    Dim conn As SqlConnection = New SqlConnection(strConnection)                    '設定連線 
    Dim cmd As New SqlCommand                                                       '宣告SqlCommand類變數cmd</span>
     2.提取重複的程式碼:
<span style="font-size:14px">    ''' <summary>
    ''' 關閉連線
    ''' </summary>
    ''' <param name="conn">需要關閉的連線</param>
    ''' <remarks></remarks>
    Private Sub CloseConn(ByVal conn As SqlConnection)
        '如果沒有關閉,則關閉連線
        If (conn.State <> ConnectionState.Closed) Then
            conn.Close()
            conn = Nothing
        End If
    End Sub

    ''' <summary>
    ''' 關閉命令
    ''' </summary>
    ''' <param name="cmd">需要關閉的命令</param>
    ''' <remarks></remarks>
    Private Sub CloseCmd(ByVal cmd As SqlCommand)
        '如果沒有關閉,則關閉命令
        If Not IsNothing(cmd) Then
            cmd.Dispose()
            cmd = Nothing
        End If
    End Sub</span>
    3.具體操作。分別是有參增刪改、無參增刪改、有參查詢、無參查詢。
<span style="font-size:14px">    ''' <summary>
    ''' 關閉命令
    ''' </summary>
    ''' <param name="cmd">需要關閉的命令</param>
    ''' <remarks></remarks>
    Private Sub CloseCmd(ByVal cmd As SqlCommand)
        '如果沒有關閉,則關閉命令
        If Not IsNothing(cmd) Then
            cmd.Dispose()
            cmd = Nothing
        End If
    End Sub
    ''' <summary>  
    ''' 有引數的 增刪改 操作
    ''' </summary>  
    ''' <param name="cmdText">需要執行的命令</param>  
    ''' <param name="cmdType">所執行命令的型別,一般是Sql語句,也有可能是儲存過程,或表</param>  
    ''' <param name="sqlParams">引數陣列</param>  
    ''' <returns>返回執行 增刪改 語句受影響的行數,為Integer型別</returns>  
    Public Function ExecAddDelUpdate(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParams As SqlParameter()) As Integer

        '將傳入的值,分別為cmd的屬性賦值  
        cmd.Parameters.AddRange(sqlParams)      '將引數傳入  
        cmd.CommandType = cmdType               '設定一個值,解釋cmdText  
        cmd.Connection = conn                   '設定連線  
        cmd.CommandText = cmdText               '設定查詢的語句  

        '執行操作
        Try
            conn.Open()                         '開啟連線  
            Return cmd.ExecuteNonQuery()        '執行增刪改操作並返回受影響的行數  
            cmd.Parameters.Clear()              '清除引數  
        Catch ex As Exception
            Return 0                            '如果出錯,返回0  
        Finally
            Call CloseConn(conn)                '關閉連線
            Call CloseCmd(cmd)                  '關閉連線
        End Try

    End Function




    ''' <summary>
    ''' 無引數的 增刪改 操作
    ''' </summary>
    ''' <param name="cmdText">需要執行的命令</param>
    ''' <param name="cmdType">所執行命令的型別,一般是Sql語句,也有可能是儲存過程,或表</param>
    ''' <returns>返回執行 增刪改 語句受影響的行數,為Integer型別</returns>
    Public Function ExecAddDelUpdate(ByVal cmdText As String, ByVal cmdType As CommandType) As Integer

        '將傳入的引數,分別為cmd的屬性賦值
        cmd.CommandType = cmdType               '設定一個值,解釋cmdText  
        cmd.Connection = conn                   '設定連線  
        cmd.CommandText = cmdText               '設定查詢的語句  

        '執行操作
        Try
            conn.Open()                         '開啟連線  
            Return cmd.ExecuteNonQuery()        '執行增刪改操作並返回受影響的行數  
            cmd.Parameters.Clear()              '清除引數  
        Catch ex As Exception
            Return 0                            '如果出錯,返回0  
        Finally
            Call CloseConn(conn)                '關閉連線
            Call CloseCmd(cmd)                  '關閉連線
        End Try

    End Function




    ''' <summary>
    ''' 有引數的 查詢 操作
    ''' </summary>
    ''' <param name="cmdText">需要執行的命令</param>  
    ''' <param name="cmdType">所執行命令的型別,一般是Sql語句,也有可能是儲存過程,或表</param>  
    ''' <param name="sqlParams">引數陣列</param>  
    ''' <returns>返回執行 查詢 得到的結果,為DataTable型別</returns>  
    Public Function ExecSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParams As SqlParameter()) As DataTable

        Dim sqlAdapter As SqlDataAdapter        '宣告介面卡
        Dim dt As New DataTable                 '宣告資料表
        Dim ds As New DataSet                   '宣告資料快取

        '將傳入的值,分別為cmd的屬性賦值  
        cmd.Parameters.AddRange(sqlParams)      '將引數傳入  
        cmd.CommandType = cmdType               '設定一個值,解釋cmdText  
        cmd.Connection = conn                   '設定連線  
        cmd.CommandText = cmdText               '設定查詢的語句  

        sqlAdapter = New SqlDataAdapter(cmd)    '例項化介面卡

        '執行操作
        Try
            sqlAdapter.Fill(ds)                 '用介面卡對ds進行填充
            dt = ds.Tables(0)                   '返回資料集的第一個表
            cmd.Parameters.Clear()              '清除引數
        Catch ex As Exception
            MsgBox("查詢失敗", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告")
        Finally
            Call CloseConn(conn)                '關閉連線
            Call CloseCmd(cmd)                  '關閉連線
        End Try
        Return dt

    End Function




    ''' <summary>
    ''' 無引數的 查詢 操作,返回值為DataTable型別
    ''' </summary>
    ''' <param name="cmdText">需要執行的命令</param>  
    ''' <param name="cmdType">所執行命令的型別,一般是Sql語句,也有可能是儲存過程,或表</param>  
    ''' <returns>返回執行 查詢 得到的結果,為DataTable型別</returns>  
    Public Function ExecSelect(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable

        Dim sqlAdapter As SqlDataAdapter        '宣告介面卡
        Dim dt As New DataTable                 '宣告資料表
        Dim ds As New DataSet                   '宣告資料快取

        '將傳入的值,分別為cmd的屬性賦值  
        cmd.CommandType = cmdType               '設定一個值,解釋cmdText  
        cmd.Connection = conn                   '設定連線  
        cmd.CommandText = cmdText               '設定查詢的語句  

        sqlAdapter = New SqlDataAdapter(cmd)    '例項化介面卡

        '執行操作
        Try
            sqlAdapter.Fill(ds)                 '用介面卡對ds進行填充
            dt = ds.Tables(0)                   '返回資料集的第一個表
        Catch ex As Exception
            MsgBox("查詢失敗", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告")
        Finally
            Call CloseConn(conn)                '關閉連線
            Call CloseCmd(cmd)                  '關閉連線
        End Try
        Return dt

    End Function

End Class</span>
      在今後的機房收費,我想都會用到這個步驟,大家不會每次訪問資料庫的總是重複的寫那麼查詢資料庫的程式碼吧,從SqlHelper中我們可以學到面向物件的思想,以後在今後的程式設計中要注意會使用模板。這樣精簡程式碼,提高程式碼利用率。