標籤:.net
在接觸SqlHelper之前已經是久聞大名了。機房的重構師傅說先用三層的思想來做,等體會深了在加設計模式和其他的。前天搬著電腦讓師傅看了看,指導了指導,然後說可以加一些東西了。我說加這個加那個?師傅說想加什麼想用什麼回去自己再學學具體的會體會深刻。
其實在寫純三層的時候已經感受到了D層中代碼的大量重複。串連資料庫查詢資料庫寫SQL語句總是用到那麼幾句話。
機房收費中關於資料庫的操作無非這四種情況:
1.不帶參數的增刪改操作,返回結果為值
2.帶參數的增刪改操作,返回結果為值
3.不帶參數的查詢操作,以表為返回結果
4.帶參數的查詢操作,以表為返回結果
SqlHelper可以將這些方法進行封裝,然後使用的時候只需調用。有參數的傳參。
Imports System.DataImports System.Data.SqlClientImports System.ConfigurationPublic Class SqlHelper Private Shared ConnectionString As String = ConfigurationManager.AppSettings("strConn") ''' <summary> ''' 執行不帶參數的增刪改操作 ''' </summary> ''' <param name="cmdTxt">參數cmdTxt為所要執行的sql語句</param> ''' <param name="cmdType">SqlCommand的執行類型</param> ''' <returns>整形傳回值res,執行成功則res!=0,不成功則res=0</returns> ''' <remarks></remarks> Public Shared Function ExecuteNoQuery(ByVal cmdTxt As String, ByVal cmdType As CommandType) As Integer Dim conn As SqlConnection = New SqlConnection(ConnectionString) '定義串連變數conn,串連資料庫 Dim cmd As SqlCommand '定義執行命令變數 Dim res As Integer '定義傳回值變數res cmd = New SqlCommand(cmdTxt, conn) '執行個體化conn上的SqlCommand命令,執行語句為cmdTxt cmd.CommandType = cmdType '命令執行的類型 Try '如果資料庫連接狀態為關閉則將其開啟 If conn.State = ConnectionState.Closed Then conn.Open() End If '執行cmdTxt語句,並將執行結果返回給res(執行成功返回的記錄總數) 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 'res作為結果返回 End Function ''' <summary> ''' 執行帶參數的增刪改操作 ''' </summary> ''' <param name="cmdTxt">參數cmdTxt為所要執行的sql語句</param> ''' <param name="cmdType">SqlCommand的執行類型</param> ''' <param name="paras">sql語句中引用的參數</param> ''' <returns></returns> ''' <remarks></remarks> Public Shared Function ExecuteNoQuery(ByVal cmdTxt As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As Integer Dim conn As SqlConnection = New SqlConnection(ConnectionString) '定義串連變數conn,串連資料庫 Dim cmd As SqlCommand '定義執行命令變數 Dim res As Integer '定義傳回值變數res cmd = New SqlCommand(cmdTxt, conn) '執行個體化conn上的SqlCommand命令,執行語句為cmdTxt cmd.CommandType = cmdType '命令執行的類型 cmd.Parameters.AddRange(paras) '執行cmdTxt語句時所帶的參數 Try '如果資料庫連接狀態為關閉則將其開啟 If conn.State = ConnectionState.Closed Then conn.Open() End If '執行cmdTxt語句,並將執行結果返回res(執行成功返回的記錄總數) 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 'res作為傳回值返回 End Function ''' <summary> ''' 執行不帶參數的查詢操作 ''' </summary> ''' <param name="cmdTxt">cmdTxt作為查詢時的sql語句</param> ''' <param name="cmdType">查詢時的查詢方式</param> ''' <returns>查詢後以表的方式返回</returns> ''' <remarks></remarks> Public Shared Function GetDataTable(ByVal cmdTxt As String, ByVal cmdType As CommandType) As DataTable Dim conn As SqlConnection = New SqlConnection(ConnectionString) '串連資料庫 Dim cmd As New SqlCommand '執行個體化命令查詢變數 Dim adataset As DataSet '定義資料緩衝變數 Dim adaptor As SqlDataAdapter '定義資料配接器變數 cmd = New SqlCommand(cmdTxt, conn) '在conn上面執行個體化命令變數cmd,執行語句cmdTxt adaptor = New SqlDataAdapter(cmd) '將結果綁定到資料配接器變數adaptor上面 adataset = New DataSet '執行個體化資料緩衝變數adataset cmd.CommandType = cmdType '選擇命令執行的類型 Try '如果資料庫連接狀態為關閉則將其開啟 If conn.State = ConnectionState.Closed Then conn.Open() End If '向adaptor對象中填充查詢的資料 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 ''' <summary> ''' 執行帶參數的查詢操作 ''' </summary> ''' <param name="cmdTxt">參數cmdTxt為所要執行的sql語句</param> ''' <param name="cmdType">查詢時的查詢方式</param> ''' <param name="paras">查詢時的命令參數paras</param> ''' <returns>查詢後以表的方式返回</returns> ''' <remarks></remarks> Public Shared Function GetDataTable(ByVal cmdTxt As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As DataTable Dim conn As SqlConnection = New SqlConnection(ConnectionString) '串連資料庫 Dim cmd As SqlCommand '定義命令變數cmd Dim adaptor As SqlDataAdapter '定義資料配接器變數 Dim adataset As DataSet '定義資料緩衝變數 cmd = New SqlCommand(cmdTxt, conn) '在conn上面執行執行個體化命令變數,並執行語句cmdType cmd.CommandType = cmdType '命令執行的類型 cmd.Parameters.AddRange(paras) '命令執行時的參數 adaptor = New SqlDataAdapter(cmd) '將結果綁定到資料配接器變數adaptor上面 adataset = New DataSet Try '如果資料連線狀態為關閉則開啟 If conn.State = ConnectionState.Closed Then conn.Open() End If adaptor.Fill(adataset) '向adaptor對象中填充查詢的資料 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 FunctionEnd Class
SqlHelper這個helper確實幫我們解決了不少問題,減少了代碼的重複編寫。終於深刻體會了師傅的良苦用心。在機房中有很多值得我們去學習使用實踐我們之前的理論知識。