機房收費系統我的重構版敲完登錄系統以後日後敲了幾個窗口,對於那些數據庫鏈接SqlConnenction、SqlConnamd等經常敲反覆的代碼,以前也看過其它人的博客,這個東西不用還真不行。sql
SqlHelper是什麼?數據庫
SqlHelper是一個基於·NETFramework的數據庫操做組件。組件中包括數據庫操做方法。數組
SqlHelper的做用?spa
SqlHelper用於簡化你反覆的去寫那些數據庫鏈接(SqlConnection),SqlCommand,SqlDataReader等等。SqlHelper封裝事後通常是僅僅需要給方法傳入一些參數如數據庫鏈接字符串,SQL參數等。就可以訪問數據庫了。日誌
機房我的重構Sqlhelper代碼:code
’**************************************************** ’文件名稱:SqlHelper ’命名空間:DAL '內容:使用SqlHelper,提供較高的數據訪問性 ’功能: ’文件關係: ’做者:趙亞盟 ’小組:XXX ’生成日期:2014-07-17 14:44:38 ’版本號號:V1.0.0.0 ’改動日誌: ’版本號說明: '**************************************************** Imports System.Data Imports System.Data.SqlClient 'SQLServer的鏈接對象 Imports System.Configuration '配置文件的引用 (管理器中也要引用) '------------------------------------------------------------------------------------------------------------------------------------------------------------------ Public Class SqlHelper Dim Connstr As String = ConfigurationManager.AppSettings("Connstr") '配置文件 Dim conn As New SqlConnection '定義鏈接 Dim cmd As New SqlCommand '定義命令 Public Sub New() conn = New SqlConnection(Connstr) End Sub #Region "有參數的查詢操做" ''' <summary> '''運行查詢操做。有參數返回datatable類型 ''' </summary> ''' <param name="cmdText">需要運行語句。可以是Sql語句也可以是存儲過程</param> ''' <param name="cmdType">推斷Sql語句的類型,通常都不是存儲過程</param> ''' <param name="paras">參數數組</param> ''' <returns>返回表</returns> ''' <remarks></remarks> Public Function GetDataTable(cmdText As String, cmdType As String, paras As SqlParameter()) As DataTable Dim adapter As New SqlDataAdapter Dim ds As New DataSet '定義一個適配器對象 Dim dt As New DataTable cmd.CommandText = cmdText '設置查詢語句 cmd.CommandType = cmdType cmd.Connection = conn '設置鏈接,全局變量 cmd.Parameters.AddRange(paras) '傳入參數 adapter = New SqlDataAdapter(cmd) '實例化Adapter Try adapter.Fill(ds) '用Adapter將Dataset填充 dt = ds.Tables(0) 'datatable爲DataSet的第一個表 cmd.Parameters.Clear() '清除參數 Catch ex As Exception MsgBox("查詢失敗", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告") Finally Call CloseConn(conn) Call CloseCmd(cmd) '銷燬cmd End Try Return dt '返回受影響的行數 End Function #End Region '------------------------------------------------------------------------------------------------------------------------------------------------------------------------ #Region "無參數的查詢操做" ''' <summary> '''運行查詢操做。無參數返回datatable類型 ''' </summary> ''' <param name="cmdText">需要運行語句,可以是Sql語句也可以是存儲過程</param> ''' <param name="cmdType">推斷Sql語句的類型,通常都不是存儲過程</param> ''' <returns>返回表</returns> ''' <remarks></remarks> Public Function GetDataTable(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable Dim adapter As New SqlDataAdapter Dim ds As New DataSet '定義一個適配器對象 Dim dt As New DataTable cmd.CommandText = cmdText '將sql語句傳給cmdsql cmd.CommandType = cmdType '肯定語句類型 cmd.Connection = conn '設置鏈接,全局變量 adapter = New SqlDataAdapter(cmd) '實例化Adapter Try adapter.Fill(ds) '用Adapter將Dataset填充 dt = ds.Tables(0) 'datatable爲DataSet的第一個表 Catch ex As Exception MsgBox("查詢失敗", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告") Finally '銷燬cmd Call CloseConn(conn) Call CloseCmd(cmd) End Try Return dt '返回受影響的行數 End Function #End Region '---------------------------------------------------------------------------------------------------------------------------------------------------------------------- #Region "有參數的增刪改" ''' <summary> ''' ///運行有參數的增刪改操做,有參數則返回Boolean類型,確認是否運行成功 ''' </summary> ''' <param name="cmdText">需要運行語句。可以是Sql語句也可以是存儲過程</param> ''' <param name="cmdType">推斷Sql語句的類型。通常都不是存儲過程</param> ''' <param name="paras">參數數組</param> ''' <returns>返回Boolean類型。成功返回true,不然返回false</returns> ''' <remarks></remarks> Public Function ExecuteNoQuery(cmdText As String, cmdType As CommandType, paras As SqlParameter()) As Boolean cmd.Parameters.AddRange(paras) '傳入參數 cmd.CommandType = cmdType '肯定語句類型 cmd.CommandText = cmdText '設置查詢語句 cmd.Connection = conn '設置鏈接。全局變量 Try conn.Open() '打開鏈接 Return cmd.ExecuteNonQuery() '運行增刪改操做 cmd.Parameters.Clear() '清除參數 Catch ex As Exception Return False '假設出現錯誤,則返回false Finally '關閉數據庫 Call CloseConn(conn) Call CloseCmd(cmd) End Try End Function #End Region '------------------------------------------------------------------------------------------------------------------------------------------------------------------------ #Region "無參數的增刪改" ''' <summary> ''' ///運行增刪改操做,無參返回Boolean型。確認是否運行成功 ''' </summary> ''' <param name="cmdText">需要運行語句。可以是Sql語句也可以是存儲過程</param> ''' <param name="cmdType">推斷Sql語句的類型,通常都不是存儲過程</param> ''' <returns>返回Boolean類型,成功返回true,不然返回false</returns> ''' <remarks></remarks> Public Function ExecuteNoQuery(cmdText As String, cmdType As CommandType) As Boolean cmd.CommandType = cmdType '推斷類型 cmd.CommandText = cmdText '設置查詢語句 cmd.Connection = conn '設置鏈接 Try conn.Open() '打開鏈接 Return cmd.ExecuteNonQuery() '運行增刪改操做 Catch ex As Exception Return False '假設出現錯誤,則返回false Finally '關閉數據庫 Call CloseConn(conn) Call CloseCmd(cmd) End Try End Function #End Region Public Sub CloseCmd(ByVal cmd As SqlCommand) '推斷cmd命令是否存在。假設cmd命令不存在就銷燬 If Not IsNothing(cmd) Then cmd.Dispose() cmd = Nothing End If End Sub Public Sub CloseConn(ByVal conn As SqlConnection) '推斷數據庫鏈接對象狀態是不是斷開狀態,,假設不是就斷開 If conn.State <> ConnectionState.Closed Then conn.Close() '關閉鏈接 End If End Sub End Class
在 SqlHelper 類中實現的方法包含:對象
ExecuteNonQuery。用於運行(有參數或無參數的)不返回不論什麼行或值的命令。這些命令通常常使用於運行數據庫(增\刪\改)更新,但也可用於返回存儲過程的輸出參數。blog
ExecuteReader。此方法用於返回 SqlDataReader 對象,該對象包括由某一命令返回的結果集。ip
ExecuteDataset。此方法返回DataSet 對象,該對象包括由某一命令返回的結果集。rem
注意:在使用SqlHelper方法調用數據庫存儲過程時。需要獲取存儲過程的返回值。使用帶有SSqlParameter[]參數的方法,Object[]參數的方法沒法獲取存儲過程的返回值。