天天看點

VB.net之旅-SQLHelper的應用程式配置檔案和使用(機房收費系統重構個人版)

       “就不能不換DB嗎?——抽象工廠模式”,沒錯,這是大話設計中的一章,在這一章中,大鳥教會了小菜,用配置檔案改變‘DB’的值,進而改變了應用程式要通路的資料庫類型。詳情請見大話設計模式P157

  1.      我們在SQLHelper中也用到了配置檔案來改變SQLHelper中資料庫連接配接的字元串
    VB.net之旅-SQLHelper的應用程式配置檔案和使用(機房收費系統重構個人版)

 因為我們使用的是應用程式配置檔案,是以我們将配置檔案添加在UI層,右擊UI層->建立項->正常->應用程式配置檔案,在app.config中對connstr進行指派。

VB.net之旅-SQLHelper的應用程式配置檔案和使用(機房收費系統重構個人版)
  1. SQLHelper将我們日常生活中常用的四個存儲過程(insert,delete,modify, select)進行了封裝
    1. 無參,傳回值為所影響行數的增删改方法
    2. 有參,傳回值為所影響行數的增删改方法
    1. 無參,傳回值為SqlDataReader的查方法
    1. 有參,傳回值為SqlDataReader的查方法
      <span style="font-family:Tahoma;font-size:18px;">Imports System
      Imports System.Data
      '需要在解決方案管理器中對SQLHelper所在的項目中添加對System.Configuration的引用
      Imports System.Configuration
      Imports System.Data.SqlClient
      
      Public Class SQLHelper
          Dim conn As SqlConnection
          Dim cmd As SqlCommand
          Dim connstr As String = ConfigurationManager.AppSettings("connstr").ToString
      
          Public SQLHelper()
      
      #Region "建立資料庫連接配接對象"
          ''' <summary>
          ''' 建立資料庫的連接配接
          ''' </summary>
          ''' <returns>傳回一個資料庫的連接配接SqlConnection對象</returns>
          ''' <remarks></remarks>
          Public Function getSqlConnection() As SqlConnection
              Try
                  conn = New SqlConnection(connstr) '利用配置檔案,連接配接到connstr所指定的資料庫
                  If (conn.State.Equals(ConnectionState.Open)) = False Then
                      conn.Open()
      
                  End If
              Catch ex As Exception
                  Throw New Exception(ex.Message.ToString())
              End Try
              Return conn
          End Function
      #End Region
      
      #Region "設定SqlCommand對象"
          ''' <summary>
          ''' 設定SqlCommand對象
          ''' </summary>
          ''' <param name="cmd">SqlCommand對象</param>
          ''' <param name="cmdText">指令文本</param>
          ''' <param name="cmdType">指令類型</param>
          ''' <param name="cmdParms">參數集合</param>
          ''' <remarks></remarks>
          Public Sub SetCommand(ByVal cmd As SqlCommand, ByVal cmdText As String, ByVal cmdType As CommandType, ByVal cmdParms As SqlParameter())
              cmd.Connection = conn
              cmd.CommandText = cmdText
              cmd.CommandType = cmdType
      
              If (cmdParms Is Nothing) = False Then
                  cmd.Parameters.AddRange(cmdParms)
              End If
          End Sub
      
      #End Region
      
      #Region "無參,傳回所影響的行數的增删改方法"
          ''' <summary>
          ''' 執行不帶參數sql語句或存儲過程,傳回所影響的行數
          ''' </summary>
          ''' <param name="cmdText">增,删,改sql語句</param>
          ''' <returns>傳回所影響的行數</returns>
          ''' <remarks></remarks>
          Public Function ExecuteNonQuery(ByVal cmdText As String) As Int16
              Dim count As Int16
              Try
                  getSqlConnection()
                  cmd = New SqlCommand(cmdText, conn)
                  count = cmd.ExecuteNonQuery()
                  conn.Close()
      
              Catch ex As Exception
                  Throw New Exception(ex.Message.ToString())
              End Try
              Return count
      
      
          End Function
      #End Region
      
      #Region "有參,傳回所影響的行數的增删改方法"
      
          ''' <summary>
          ''' 執行帶參數sql語句或存儲過程,傳回所影響的行數
          ''' </summary>
          ''' <param name="cmdText">帶參數的sql語句和存儲過程名</param>
          ''' <param name="cmdType">指令類型</param>
          ''' <param name="cmdparms">參數集合</param>
          ''' <returns>傳回所影響的行數</returns>
          ''' <remarks></remarks>
          Public Function ExecuteNonQuery(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal cmdparms As SqlParameter())
              Dim count As Int16
              Try
                  getSqlConnection()
                  Dim cmd As New SqlCommand
                  SetCommand(cmd, cmdText, cmdType, cmdparms)
                  count = cmd.ExecuteNonQuery()
                  cmd.Parameters.Clear()
                  conn.Close()
      
              Catch ex As Exception
                  Throw New Exception(ex.Message.ToString)
      
              End Try
              Return count
      
          End Function
      #End Region
      
      #Region "無參,具有傳回值的查詢方法"
          ''' <summary>
          ''' 執行不帶參數sql語句,傳回一個從資料源讀取資料的SqlDataReader對象
          ''' </summary>
          ''' <param name="cmdText">相應的sql語句</param>
          ''' <returns>一個從資料源讀取資料的SqlDataReader對象</returns>
          ''' <remarks></remarks>
          Public Function ExecuteReader(ByVal cmdText As String) As SqlDataReader
              Dim reader As SqlDataReader
              Try
                  getSqlConnection()
                  cmd = New SqlCommand(cmdText, conn)
                  reader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
              Catch ex As Exception
                  Throw New Exception(ex.Message.ToString)
              End Try
              Return reader
      
          End Function
      #End Region
      
      #Region "無參,具有傳回值的查詢方法"
      
          ''' <summary>
          ''' 執行帶參數的sql語句或存儲過程,傳回一個從資料源讀取資料的SqlDataReader對象
          ''' </summary>
          ''' <param name="cmdText">sql語句或存儲過程名</param>
          ''' <param name="cmdType">指令類型</param>
          ''' <param name="cmdParms">參數集合</param>
          ''' <returns>傳回一個從資料源讀取資料的SqlDataReader對象</returns>
          ''' <remarks></remarks>
          Public Function ExecuteReader(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal cmdParms As SqlParameter()) As SqlDataReader
              Dim reader As SqlDataReader
              Try
                  getSqlConnection()
                  cmd = New SqlCommand()
                  SetCommand(cmd, cmdText, cmdType, cmdParms)
                  reader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
              Catch ex As Exception
                  Throw New Exception(ex.Message.ToString())
      
              End Try
              Return reader
          End Function
      #End Region
      
      End Class</span>
                 

    光有代碼,不會使用也發揮不了SQLHelper的強大之處

有參,傳回值為所影響行數的增删改使用

VB.net之旅-SQLHelper的應用程式配置檔案和使用(機房收費系統重構個人版)

有參,傳回值為SqlDataReader的查方法的使用

VB.net之旅-SQLHelper的應用程式配置檔案和使用(機房收費系統重構個人版)

             從開始知道有個SQLHelper到真正實作,花了我一周的時間,可真是耗時耗力,不過我也體會到了SQLHelper的好處,SqlHelper簡化了我們需要重複寫的資料庫連接配接,如SqlConnection,SqlCommand,SqlDataReader等等;還有,SqlHelper封裝過後通常是隻需要給方法傳入一些參數如資料庫連接配接字元串,SQL參數等,就可以通路資料庫了,很友善。