[機房合作]—SqlHelper我們又約了,機房合作sqlhelper
一、是什嗎? SqlHelper是一個基於·NET Framework的資料庫操作組件,組件中包含資料庫操作方法。
二、為什嗎? 為什麼要用SqlHelper類?
1.SqlHelper用於簡化重複的去寫那些資料庫連接(SqlConnection),SqlCommand,SqlDataReader等。
2.qlHelper 封裝過後通常是只需要給方法傳入一些參數如:資料庫連接字串,SQL參數等,就可以訪問資料庫了。
3.每種方法的重載都支援不同的方法參數,因此開發人員可以確定傳遞串連、事務和參數資訊的方式。
4.為開發人員選擇訪問資料的方式提供了必要的靈活性。
三、怎麼用? 在SqlHelper類中實現的方法包括:
1.ExecuteNonQuery。此方法用於執行不返回任何行或值的命令。這些命令通常用於執行資料庫更新,但也可用於返回預存程序的輸出參數。
2.ExecuteReader。此方法用於返回SqlDataReader對象,該對象包含由某一命令返回的結果集。
3.ExecuteDataset。此方法返回DataSet對象,該對象包含由某一命令返回的結果集。
4.ExecuteScalar。此方法返回一個值。該值始終是該命令返回的第一行的第一列。
5.ExecuteXmlReader。此方法返回 FOR XML 查詢的 XML 片段。
VB.NET版執行個體(SqlHelper類):
Imports System.Data.SqlClientImports System.ReflectionImports System.DataImports System.ConfigurationImports System.Collections.GenericPublic Class SQLHelper '定義一個資料庫連接對象 Dim strCon As String = ConfigurationSettings.AppSettings("ConnString") Dim conn As SqlConnection = New SqlConnection(strCon) '定義一個命令對象 Dim cmd As New SqlCommand ''' <summary> ''' 關閉串連 ''' </summary> ''' <param name="conn">需要關閉的串連</param> ''' <remarks></remarks> Private Sub CloseConn(ByVal conn As SqlConnection) '如果沒有關閉,則關閉串連 If (conn.State <> ConnectionState.Closed) Then conn.Close() conn = Nothing End If End Sub ''' <summary> ''' 關閉命令 ''' </summary> ''' <param name="cmd">需要關閉的命令</param> ''' <remarks></remarks> Private Sub CloseCmd(ByVal cmd As SqlCommand) '如果沒有關閉命令,則關閉命令 If Not IsNothing(cmd) Then cmd.Dispose() '處理 ' cmd = Nothing End If End Sub ''' <summary> ''' 有參數的 增刪改 操作 ''' </summary> ''' <param name="cmdText">需要執行的命令</param> ''' <param name="cmdType">所執行命令的類型,一般是sql語句,也有可能是預存程序,或表</param> ''' <param name="sqlParams">參數數組</param> ''' <returns>返回執行 增刪改 語句受影響的行數,為Integer類型</returns> ''' <remarks></remarks> Public Function ExecuteNoQuery(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParams As SqlParameter()) As Integer '將傳入的值,分別為cmd的屬性賦值 cmd.Parameters.AddRange(sqlParams) '傳入參數 cmd.CommandType = cmdType cmd.Connection = conn '設定串連 cmd.CommandText = cmdText 'cmd = New SqlCommand(cmdText, conn) Dim result As Integer '執行操作 Try conn.Open() result = cmd.ExecuteNonQuery() '執行增刪改操作並返回受影響的行數 cmd.Parameters.Clear() '清除參數 Catch ex As Exception MsgBox(ex.Message, , "資料庫操作") Finally Call CloseConn(conn) '關閉串連 Call CloseCmd(cmd) '關閉命令 End Try Return result End Function ''' <summary> ''' 無參數的 增刪改 操作 ''' </summary> ''' <param name="cmdText">需要執行的命令</param> ''' <param name="cmdType">所執行的命令的類型,一般是sql語句,也有可能是預存程序,或表</param> ''' <returns>返回執行 增刪改 語句受影響的行數,為Integer類型</returns> ''' <remarks></remarks> Public Function ExecuteNoQuery(ByVal cmdText As String, ByVal cmdType As CommandType) As Integer '將傳入的參數分別為cmd屬性賦值 cmd.CommandType = cmdType cmd.Connection = conn cmd.CommandText = cmdText '設定查詢單的語句 'cmd = New SqlCommand(cmdText, conn) Dim res As Integer '執行操作 Try conn.Open() res = cmd.ExecuteNonQuery() '執行 增刪改操作並返回收到影響的行術 cmd.Parameters.Clear() '清楚參數 Catch ex As Exception MsgBox(ex.Message, , "資料庫操作") Finally Call CloseConn(conn) Call CloseCmd(cmd) End Try Return res End Function ''' <summary> ''' 有參數的查詢操作 ''' </summary> ''' <param name="cmdText">需要執行的命令</param> ''' <param name="cmdType">所執行命令的類型,一般是sql語句,也有可能是預存程序或者表</param> ''' <param name="sqlParams">參數數組</param> ''' <returns>返回執行 查詢得到的結果,為DataTable類型</returns> ''' <remarks></remarks> Public Function ExecSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParams As SqlParameter()) As DataTable Dim sqlAdapter As New SqlDataAdapter '聲明適配器 Dim dt As New DataTable '聲明資料表 Dim ds As New DataSet '聲明資料緩衝 cmd.CommandType = cmdType cmd.Connection = conn cmd.CommandText = cmdText '設定查詢語句 '將傳入的值分別付給cmd的屬性 cmd.Parameters.AddRange(sqlParams) '將參數傳入 'cmd = New SqlCommand(cmdText, conn) sqlAdapter = New SqlDataAdapter(cmd) '執行個體化適配器 '執行操作 Try sqlAdapter.Fill(ds) '用適配器對ds進行填充 dt = ds.Tables(0) '返回資料集的第一個表 cmd.Parameters.Clear() '清楚參數 Catch ex As Exception MsgBox("查詢失敗", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告") Finally Call CloseConn(conn) Call CloseCmd(cmd) End Try Return dt End Function ''' <summary> ''' 無參數的查詢操作 ''' </summary> ''' <param name="cmdText">需要執行的命令</param> ''' <param name="cmdType">所執行命令的類型,一般是sql語句,也有可能是預存程序或者表</param> ''' <returns>返回執行 查詢得到的結果,為DataTable類型</returns> ''' <remarks></remarks> Public Function ExecSelect(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable Dim sqlAdapter As SqlDataAdapter '聲明適配器 Dim dt As New DataTable '聲明資料表 Dim ds As New DataSet '聲明資料緩衝 '將傳入的值分別給cmd屬性賦值 cmd.CommandType = cmdType '設定一個值,屆時cmdtext cmd.Connection = conn cmd.CommandText = cmdText sqlAdapter = New SqlDataAdapter(cmd) '執行個體化適配器 '執行操作 Try sqlAdapter.Fill(ds) '用適配器對ds進行填充 dt = ds.Tables(0) '返回資料集的第一個表 Catch ex As Exception MsgBox("查詢失敗", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告") Finally Call CloseConn(conn) Call CloseCmd(cmd) End Try Return dt End FunctionEnd Class
D層調用SqlHelper類中對應方法的執行個體:
<span style="font-family:KaiTi_GB2312;font-size:18px;"> '''調用有參數的增刪改操作 ''' <summary> ''' 向基本資料設定表中插入一行資訊 ''' </summary> ''' <param name="enBasicData">傳入BasicData表中屬性的值</param> ''' <returns>返回布爾值</returns> ''' <remarks></remarks> Public Function InsertBasicData(enBasicData As BasicDataEntity) As Boolean Implements IDAL.IBasicData.InsertBasicData '定義資料庫連接字串 Dim sql As String = "Insert into T_BasicData (Rate,TmpRate,UnitTime,LeastTime,PrepareTime,LimitCash,Date,Time,UserID) value(@rate,@tmprate,@unittime,@leasttime,@reparetime,@limitcash,@date,@time,@userid)" '提出要插入的字串,並賦值 Dim sqlparams As SqlParameter() = {New SqlParameter("@rate", enBasicData.Rate), New SqlParameter("@tmprate", enBasicData.TmpRate), New SqlParameter("@unittime", enBasicData.UnitTime), New SqlParameter("@leasttime", enBasicData.LeastTime), New SqlParameter("@preparetime", enBasicData.PrepareTime), New SqlParameter("@limitcash", enBasicData.LimitCash), New SqlParameter("@date", enBasicData.zDate), New SqlParameter("@time", enBasicData.Time), New SqlParameter("@userid", enBasicData.UserID)} '執行個體化一個sqlhelper類的對象 Dim helper As New SQLHelper '調用sqlhelper類的方法 Dim InsertOK = helper.ExecuteNoQuery(sql, CommandType.Text, sqlparams) Return InsertOK End Function '''無參數的增刪改操作 ''' <summary> ''' 通過使用者帳號刪除使用者記錄表中的所有資訊 ''' </summary> ''' <returns>返回布爾值</returns> ''' <remarks></remarks> Public Function DeleteByUserID(enUser As UserEntity) As Boolean Implements IDAL.IUser.DeleteByUserID '建立刪除串連資料庫語句 Dim sql As String = "delete from T_User" '定義一個sqlHelper類的對象 Dim helper As New SQLHelper '調用sqlHelper中的刪除方法 Dim DeleteOK = helper.ExecuteNoQuery(sql, CommandType.Text) Return DeleteOK End Function '''調用有參數的查詢操作 ''' <summary> ''' 通過卡號查詢卡表中的資訊 ''' </summary> ''' <param name="enCard">傳入CardID的值</param> ''' <returns>返回泛型集合</returns> ''' <remarks></remarks> Public Function SelectByCardID(enCard As CardEntity) As List(Of CardEntity) Implements IDAL.ICard.SelectByCardID '定義資料庫連接字串 Dim sql As String = "Select * from T_Card where CardID=@cardid" '提出查詢的字串,並賦值 Dim sqlparams As SqlParameter() = {New SqlParameter("@cardid", enCard.CardID)} '執行個體化一個暫存資料表 Dim table As New DataTable '執行個體化一個sqlhelper類對象 Dim helper As New SQLHelper '調用sqlhelper類的查詢方法,並將查詢到的資訊放到暫存資料表中 table = helper.ExecSelect(sql, CommandType.Text, sqlparams) '執行個體化一個泛型集合 Dim mylist As New List(Of CardEntity) '將暫存資料表轉化為泛型集合 mylist = DataTolist.converToList(Of CardEntity)(table) Return mylist End Function '''調用無參數的查詢操作 ''' <summary> ''' 查詢基本資料設定表中的最新資訊 ''' </summary> ''' <returns>返回泛型集合</returns> ''' <remarks></remarks> Public Function SelectBasicData() As List(Of BasicDataEntity) Implements IDAL.IBasicData.SelectBasicData '定義資料庫連接字串 Dim sql As String = "Select top 1 * from T_BasicData order by Date desc" '執行個體化暫存資料表 Dim table As New DataTable '執行個體化sqlhelper類對象 Dim helper As New SQLHelper '調用sqlhelper類的查詢方法,將查詢到的資訊放到暫存資料表中 table = helper.ExecSelect(sql, CommandType.Text) '執行個體化一個泛型集合對象 Dim mylist As New List(Of BasicDataEntity) '將暫存資料表轉化為泛型集合 mylist = DataTolist.converToList(Of BasicDataEntity)(table) Return mylist End Function</span>
四、總結:
SqlHelper真的很有用,期待與您下次更親密的約會。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。