簡介
Sqlhelper 是用來避免重複輸入連接數據庫代碼的類,封裝後只需要給類中的方法傳入一些參數如數據庫連接字符串,SQL參數等就可以訪問數據庫了。因爲我們要聲明該類不能被繼承或實例化,所以我們要通過靜態方法來封裝數據訪問功能。靜態方法爲類所有,可以通過對象來使用,也可以通過類來使用。但一般提倡通過類名來使用,應爲靜態方法只要定義了類,不必建立類的實例就可使用。
機制
上面說了SqlHelper的簡介,接下來介紹它具體的運行機制。首先和普通連接數據庫的步驟一樣,要先定義Connection對象,給它相應的連接字符串,連接字符串在開發項目時我們一般都是用反射來配置,然後用Command對象來對數據庫執行操作。其實SqlHelper類中的幾個方法就是command對象的幾個方法,根據需求,我們一般用兩個,一個是執行增刪改的ExecuteNonQuery()和執行查詢的ExecuteReader()。
ExecuteNonQuery()的返回值爲int型,返回受影響的行數
ExecuteReader()返回的是一個結果集DataTable,它是一個網絡虛擬表。
根據項目需要有時還會用到ExecuteScalar、ExecuteXmlReader等方法。
同時還會用到command的一些參數對象及其方法:
SqlParameter:是Sqlcommand的一個參數對象
AddRange:添加多個SqlParameter。
CommandText:獲取或設置要對數據源執行的Transact—SQL語句或存儲過程
CommandType:獲取或設置一個值,該值指示如何解釋CommandText屬性
我們通常把這些方法分爲有參和無參兩種情況
代碼
Imports System.Data.SqlClient
Imports System.Configuration
Public Class sqlHelper
'有參數的增、刪、改操作
Public Function ExecuteNoQuery(cmdText As String, cmdType As CommandType, paras As SqlParameter()) As Integer
Dim ConnStr As String = System.Configuration.ConfigurationManager.AppSettings("ConnStr")
Dim conn As SqlConnection = New SqlConnection(ConnStr)
'定義一個命令對象
Dim cmd As New SqlCommand
cmd = New SqlCommand(cmdText, conn) '或用cmd =conn.createcommand()
'cmd.Parameters.AddRange(paras)
cmd.Parameters.AddRange(paras) '添加參數
Dim res As Integer
Try
'打開數據庫
If conn.State = ConnectionState.Closed Then
conn.Open()
End If
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
End Function
'無參數的增刪改操作
Public Shared Function ExecuteNoQuery(cmdText As String, cmdType As CommandType) As Integer
Dim ConnStr As String = System.Configuration.ConfigurationManager.AppSettings("ConnStr")
Dim conn As SqlConnection = New SqlConnection(ConnStr)
Dim cmd As New SqlCommand
cmd.CommandType = cmdType
cmd = New SqlCommand(cmdText, conn)
Dim res As Integer
'不加參數
Try
If conn.State = ConnectionState.Closed Then
conn.Open()
End If
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
End Function
'有參數的查詢操作
Public Function GetDataTable(ByVal cmdTxt As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As DataTable
Dim strConnStr As String = System.Configuration.ConfigurationManager.AppSettings("ConnStr")
'定義一個數據庫連接對象
Dim conn As SqlConnection = New SqlConnection(strConnStr)
'定義一個命令對象
Dim cmd As New SqlCommand
Dim adataset As DataSet
'定義一個適配器對象
Dim adaptor As SqlDataAdapter
cmd = New SqlCommand(cmdTxt, conn)
adaptor = New SqlDataAdapter(cmd)
adataset = New DataSet
cmd.Parameters.AddRange(paras)
Try
If conn.State = ConnectionState.Closed Then
conn.Open()
End If
adaptor.Fill(adataset) '填充數據集
'Return adataset.Tables()
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
'無參數的查詢
Public Function GetDataTable(ByVal cmdTxt As String, ByVal cmdType As CommandType) As DataTable
Dim strConnStr As String = System.Configuration.ConfigurationManager.AppSettings("ConnStr")
Dim conn As SqlConnection = New SqlConnection(strConnStr)
Dim cmd As New SqlCommand
Dim adataset As DataSet
Dim adaptor As SqlDataAdapter
cmd = New SqlCommand(cmdTxt, conn)
cmd.CommandType = cmdType
adaptor = New SqlDataAdapter(cmd)
adataset = New DataSet
Try
If conn.State = ConnectionState.Closed Then
conn.Open()
End If
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
End Class
總結
在面向對象的學習中,我們知道當遇到兩個以上的需求或用到兩次以上的方法時我們就要考慮把它封裝起來。SqlHelper類就是體現了封裝的思想,它的提出是給了我們一個思路,其代碼是根據具體情況具體分析的,切莫教條主義。