機房收費係統個人重構關於SQLHelper
最近在敲機房,對於SQLHelper也是心裏有些怵,因為原來沒用過,但是看了一些博客和資料後發現,如果不用這個類,會大大增加代碼量,而且,其實它並不新,它是一個有多個關於數據庫增刪改查操作的語句函數的類,使用這個類可以方便D層調用,對數據庫的操作,我們無非就是增刪改查,而函數就是有無參數,有無返回值,SQLHelper是個新詞,不過我們卻一直在用,隻是我們不這麼叫,之所以叫SQLHelper,理所當然它是D層操作數據的助手,
在SQLHelper類中實現的方法包括:
ExecuteNonQuery。此方法用於執行不返回任何行或值的命令。這些命令通常用於執行數據庫更新,但也可用於返回存儲的輸出參數。
ExecuteReader。此方法用於返回對象,該對象包含由某一命令返回的結果集。
ExecuteDataset。此方法返回DataSet對象,該對象包含由某一命令返回的結果集。
ExecuteScalar。此方法返回一個值。該值始終是該命令返回的第一行的第一列。
ExecuteXmlReader。此方法返回 FOR XML 查詢的 XML 片段。
在機房收費係統中,用到了一下方法:
下麵用代碼來展示一下這個類:
在用SQLHelper之前,我們要先用配置文件配置連接字符串,這樣有利於在客戶端更改數據庫:
<appSettings > <add key ="Connstr" value ="datasource=.;database=ChargeSys;uid=sa;password=123456" /> </appSettings>這樣就可以在SQLHelper中方便的使用連接字符串了,不管數據庫怎麼換,對源碼都沒有影響:
Imports System.Data Imports System.Configuration Imports System.Data.SqlClient Public Class SqlHelper '獲得數據庫連接字符串 Private ReadOnly strConn As String = ConfigurationManager.AppSettings("Connstr") '新建連接 Dim connSQL As SqlConnection = New SqlConnection(strConn) '定義命令 Dim cmdSQL As New SqlCommand ''' <summary> ''' 執行增刪改,有參,確認是否執行成功 ''' </summary> ''' <param name="cmdSQLText">需要執行的數據庫語句</param> ''' <param name="cmdSQLType">數據語句的類型,可能是sql類型,也可能是存儲過程等</param> ''' <param name="sqlParams">參數數組,無法確定有多少參數</param> ''' <returns>返回受影響行數</returns> ''' <remarks></remarks> Public Function ExecuteAddDelUpdate(ByVal cmdSQLText As String, ByVal cmdSQLType As CommandType, ByVal sqlParams As SqlParameter()) As Integer cmdSQL.Parameters.AddRange(sqlParams) '將參數傳入 cmdSQL.CommandType = cmdSQLType '確定語句類型,是sql還有oracle還是其他類型 cmdSQL.CommandText = cmdSQLText '將sql語句傳給cmdSQL cmdSQL.Connection = connSQL '設置連接,全局變量 '開始執行查詢 Try connSQL.Open() '打開連接 Return cmdSQL.ExecuteNonQuery() '執行查詢 cmdSQL.Parameters.Clear() '清除參數 Catch ex As Exception Return 0 Finally Call CloseConnection(connSQL) Call CloseSQLCommand(cmdSQL) End Try End Function ''' <summary> ''' 執行增刪改,有參,確認是否執行成功 ''' </summary> ''' <param name="cmdText">需要執行的數據庫語句</param> ''' <param name="cmdType">數據語句的類型,一般為Sql語句,不是存儲過程</param> ''' <returns>返回受影響的行數</returns> ''' <remarks></remarks> Public Function ExecuteAddDelUpdate(ByVal cmdText As String, ByVal cmdType As CommandType) As Integer cmdSQL.CommandType = cmdType '確定語句類型,是sql還有oracle還是其他類型 cmdSQL.CommandText = cmdText '將sql語句傳給cmdSQL cmdSQL.Connection = connSQL '設置連接,全局變量 '開始執行查詢 Try connSQL.Open() '打開連接 Return cmdSQL.ExecuteNonQuery() '執行查詢 cmdSQL.Parameters.Clear() '清除參數 Catch ex As Exception Return 0 Finally Call CloseConnection(connSQL) Call CloseSQLCommand(cmdSQL) End Try End Function ''' <summary> ''' 執行查詢操作,有參,返回datatable類型 ''' </summary> ''' <param name="cmdText">需要執行的數據庫語句,一般SQL語句,也有存儲過程</param> ''' <param name="cmdType">數據語句的類型,一般為Sql語句,不是存儲過程</param> ''' <param name="sqlParams">參數數組,不確定有多少參數數組</param> ''' <returns>返回datatable類型</returns> ''' <remarks></remarks> Public Function ExecuteSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParams As SqlParameter()) As DataTable Dim sqlAdapter As SqlDataAdapter Dim dtSQL As New DataTable Dim dsSQL As New DataSet cmdSQL.CommandText = cmdText cmdSQL.CommandType = cmdType cmdSQL.Connection = connSQL cmdSQL.Parameters.AddRange(sqlParams) sqlAdapter = New SqlDataAdapter(cmdSQL) Try sqlAdapter.Fill(dsSQL) dtSQL = dsSQL.Tables(0) 'datatable為dataSet的第一個表 cmdSQL.Parameters.Clear() Catch ex As Exception MsgBox("查詢失敗", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告") Finally Call CloseSQLCommand(cmdSQL) End Try Return dtSQL End Function ''' <summary> ''' 執行查詢操作,無參,返回datatable類型 ''' </summary> ''' <param name="cmdText">需要執行的數據庫語句,一般SQL語句,也有存儲過程</param> ''' <param name="cmdType">數據語句的類型,一般為Sql語句,不是存儲過程</param> ''' <returns>返回datatable類型</returns> ''' <remarks></remarks> Public Function ExecuteSelect(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable Dim sqlAdapter As SqlDataAdapter Dim dtSQL As New DataTable Dim dsSQL As New DataSet cmdSQL.CommandText = cmdText cmdSQL.CommandType = cmdType cmdSQL.Connection = connSQL sqlAdapter = New SqlDataAdapter(cmdSQL) '實例化adapter Try sqlAdapter.Fill(dsSQL) '用dsSQL填充sqlAdapter dtSQL = dsSQL.Tables(0) Catch ex As Exception Call CloseSQLCommand(cmdSQL) End Try Return dtSQL End Function ''' <summary> ''' 關閉連接 ''' </summary> ''' <param name="connSQL">需要關閉連接</param> ''' <remarks></remarks> Public Sub CloseConnection(ByVal connSQL As SqlConnection) If (connSQL.State <> ConnectionState.Closed) Then '如果沒有關閉 connSQL.Close() '關閉連接 connSQL = Nothing '不指向原對象 End If End Sub ''' <summary> ''' 關閉命令 ''' </summary> ''' <param name="cmdSQL">需要關閉命令</param> ''' <remarks></remarks> Public Sub CloseSQLCommand(ByVal cmdSQL As SqlCommand) If Not IsNothing(cmdSQL) Then '如果存在命令 cmdSQL.Dispose() '將命令銷毀 cmdSQL = Nothing End If End Sub End ClassSQLHelper將數據庫操作語句分為了兩類,一類是增刪改、一類是查,這兩類又分別有有參和無參兩種,這些在D層有多個類需要操作數據庫時,我們隻需要調用這裏的類,如果有參,隻需要把參數穿進去就行了,下麵看一看在D層我們是怎麼用它的:
Imports System.Data Imports System.Data.SqlClient Imports DALHelper Imports IDAL Imports Entity Public Class LoginDAL : Implements IDAL.ILogin Public Function SelectUser(user As UserInfoEntity) As DataTable Implements ILogin.SelectUser Dim cmdText As String Dim sqlhelper As New SqlHelper Dim dtSQL As DataTable Dim sqlParams As SqlParameter() cmdText = "select * from T_UserInfo where UserName=@UserName and Password=@Password" sqlParams = {New SqlParameter("@UserName", user.UserName), New SqlParameter("@Password", user.Password)} dtSQL = sqlhelper.ExecuteSelect(cmdText, CommandType.Text, sqlParams) Return dtSQL End Function End Class這裏執行的有參查詢函數ExcuteSelect,對於SQLHelper的理解還有待提高,希望大家多多指正!
最後更新:2017-04-03 12:56:25
上一篇:
Windws OS 一些概念
下一篇:
SVN切換分支從舊版本到新版本
認識ASP.NET MVC的5種AuthorizationFilter
麵向萬物互聯的時序數據庫HiTSDB
《Spring Data 官方文檔》6. Cassandra 存儲庫
ElasticSearch遠程任意代碼執行漏洞(CVE-2014-3120)分析
17張思維導圖,一網打盡機器學習統計基礎(附下載)
微軟密謀恢複Windows開始按鈕:引開發者質疑
Swift 學習之二十一:?和 !(詳解)
細數阿裏雲在使用 Docker 過程中踩過的那些坑
java.security.MessageDigest的使用(2),生成安全令牌!
CB Insights發布50家領導AI革命的公司