遲來SQLHelper


    機房收費系統我的重構版敲完登錄系統以後日後敲了幾個窗口,對於那些數據庫鏈接SqlConnenctionSqlConnamd等經常敲反覆的代碼,以前也看過其它人的博客,這個東西不用還真不行。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[]參數的方法沒法獲取存儲過程的返回值。

相關文章
相關標籤/搜索