標籤:datagridview style blog http color io os 使用 ar
簡介
SqlHelper是一個基於·NETFramework的資料庫操作組件。組件中包含資料庫操作方法。SqlHelper用於簡化你重複
的去寫那些資料庫連接(SqlConnection),SqlCommand,SqlDataReader等等。SqlHelper封裝過後通常是只需要給方法傳入一些參數如資料庫連接字串,SQL參數等,就可以訪問資料庫了,很方便。
————官方正解
一長串的文字,我注意到的是“很方便”這三個字,那是有多方便呢???還不會用呢,也沒發現又方便呀,單單就看SqlHelper這類塊中的代碼,就費勁的慌。於是乎,擱置在那,依舊用串連資料,訪問資料,增刪改查資料等不費腦但費時的工作。有時候,不是你不想偷懶,而是自己連偷懶都不會。
一個成功的編程師是不會將時間用在粘貼複製上的。
配置項
在應用SqlHelper前最好使用web.config配置連接字串,<!--SqlServerHelper連接字串設定-->
<addconnectionString="server=.;uid=sa;pwd=123456;database=yourdatabase"name="SqlServerHelper"/>至於如何設定檔,自行百度,有些事情不能一昧的索取,要自己去發現。
源碼
編寫SqlHelper調用代碼,SqlHelper的書寫風格很多,你可以選擇自己的需求和愛好使用靜態方式或對象方式。各種利弊。選擇情況使用吧!
'//*******************************************************'** 徐露'** 創始時間:2014-8-23'** 小組:'** 修改時間:2014-9-'** 描述:個人機房重構'** 版本號碼: '**********************************************************Imports System.DataImports System.Data.SqlClientImports System.Configuration '必須要在管理器中添加引用 Public Class SQLhelperDAL '定義變數 '獲得資料庫的連接字串 Private ReadOnly strConnection As String = ConfigurationManager.AppSettings("ConnStr") '設定串連 Dim conn As SqlConnection = New SqlConnection(strConnection) '定義cmd命令 Dim cmd As New SqlCommand ''' <summary> ''' 執行增刪改三個操作,(有參)傳回值為Boolean類型,確認是否執行成功 ''' </summary> 定義一個“ExecAddDelUpdate” 函數方法 能對資料庫表中的資料進行增刪改 ''' <param name="cmdText">需要執行語句,一般是Sql語句,也有預存程序</param> ''' <param name="cmdType">判斷Sql語句的類型,一般都不是預存程序</param> ''' <param name="paras">參數數組,無法確認有多少參數</param> ''' <returns></returns> ''' <remarks></remarks> Public Function ExecAddDelUpdate(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As Integer '將傳入的值,分別為cmd的屬性賦值 cmd.Parameters.AddRange(paras) '將參數傳入 cmd.CommandType = cmdType '設定一個值,解釋cmdText cmd.Connection = conn '設定串連,全域變數 cmd.CommandText = cmdText '設定查詢的語句 Try conn.Open() '開啟串連 Return cmd.ExecuteNonQuery() '執行增刪改操作 cmd.Parameters.Clear() '清除參數 Catch ex As Exception Return 0 '如果出錯,返回0 Finally Call CloseConn(conn) Call CloseCmd(cmd) End Try End Function ''' <summary> ''' 執行增刪改三個操作,(無參) ''' </summary> ''' <param name="cmdText">需要執行語句,一般是Sql語句,也有預存程序</param> ''' <param name="cmdType">判斷Sql語句的類型,一般都不是預存程序</param> ''' <returns>Interger,受影響的行數</returns> ''' <remarks>2013年2月2日8:19:59</remarks> Public Function ExecAddDelUpdateNo(ByVal cmdText As String, ByVal cmdType As CommandType) As Integer '為要執行的命令cmd賦值 cmd.CommandText = cmdText '先是查詢的sql語句 cmd.CommandType = cmdType '設定Sql語句如何解釋 cmd.Connection = conn '設定串連 '執行操作 Try conn.Open() Return cmd.ExecuteNonQuery() Catch ex As Exception Return 0 Finally Call CloseConn(conn) Call CloseCmd(cmd) End Try End Function ''' <summary> ''' 執行查詢的操作,(有參),參數不限 ''' </summary> ''' <param name="cmdText">需要執行語句,一般是Sql語句,也有預存程序</param> ''' <param name="cmdType">判斷Sql語句的類型,一般都不是預存程序</param> ''' <param name="paras">傳入的參數</param> ''' <returns></returns> ''' <remarks></remarks> Public Function ExecSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As DataTable Dim sqlAdapter As SqlDataAdapter Dim dt As New DataTable Dim ds As New DataSet '還是給cmd賦值 cmd.CommandText = cmdText cmd.CommandType = cmdType cmd.Connection = conn cmd.Parameters.AddRange(Paras) '參數添加 sqlAdapter = New SqlDataAdapter(cmd) '執行個體化adapter Try sqlAdapter.Fill(ds) '用adapter將dataSet填充 dt = ds.Tables(0) 'datatable為dataSet的第一個表 cmd.Parameters.Clear() '清除參數 Catch ex As Exception MsgBox("查詢失敗", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告") Finally '最後一定要銷毀cmd Call CloseCmd(cmd) End Try Return dt End Function ''' <summary> ''' 執行查詢的操作,(無參) ''' </summary> ''' <param name="cmdText">需要執行語句,一般是Sql語句,也有預存程序</param> ''' <param name="cmdType">判斷Sql語句的類型,一般都不是預存程序</param> ''' <returns>dataTable,查詢到的表格</returns> ''' <remarks></remarks> Public Function ExecSelectNo(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable Dim sqlAdapter As SqlDataAdapter Dim ds As New DataSet '還是給cmd賦值 cmd.CommandText = cmdText cmd.CommandType = cmdType cmd.Connection = conn sqlAdapter = New SqlDataAdapter(cmd) '執行個體化adapter Try sqlAdapter.Fill(ds) '用adapter將dataSet填充 Return ds.Tables(0) 'datatable為dataSet的第一個表 Catch ex As Exception Return Nothing Finally '最後一定要銷毀cmd Call CloseCmd(cmd) End Try End Function ''' <summary> ''' 關閉串連 ''' </summary> ''' <param name="conn">需要關閉的串連</param> ''' <remarks></remarks> Public 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> Public Sub CloseCmd(ByVal cmd As SqlCommand) If Not IsNothing(cmd) Then '如果cmd命令存在 cmd.Dispose() '銷毀 cmd = Nothing End If End SubEnd Class
話說,有了源碼怎麼用呢,這是個問題。機房剛開始我就已經在D層加上SqlHelper類,對新事物總存在抵觸的心理,不用它。敲了幾個表單後,漸漸發現每一次的訪問資料,都是那幾行代碼,變來變去也就是對資料的增刪改查,而且每次都要寫。家中有寶,不去用虧大了。這我才硬著頭皮去琢磨這SqlHelper怎麼用。
- 觀察代碼____找不同
按定義的方法名來看,分為查詢和增刪改兩類。查詢時是返回給使用者想要查看的資訊,返回的 是DataTable類型;增刪改歸為改和更新,返回受影響的行數,更新成功就返回整數1(Integer型)。
※ DataTable是一個臨時儲存資料的網路虛擬表,可以被建立和訪問,當SqlHelper查詢後就要返回 到DataTable虛擬表中,判斷它的第一行是否有資料來插到記錄
※ Integer型,返回受影響的行數。在機房收費系統中,我們可以發現,當受影響的行數大於0說明查到相應的記錄,如果為0說明沒有查詢到資料。同理,如果受影響的行數大於0說明增刪改操作成功,為0則操作失敗。於是乎,可以通過返回受影響的行數到B層進行邏輯判斷,然後傳到U層,這樣層層遞進,妙哉。
- 靜心思考____明原理
在查詢和增刪改兩大類中,又細分了有參數和無參數量兩小類。當想要擷取資料庫的全部資訊時,如正在值班教師日誌查詢時,即可無參查詢資訊,全部在DataGridView中顯示。當想要擷取部分資訊時,即可用參數查詢。
本人就 機房收費系統 登入狀態例。分別用SqlHelper和不用SqlHelper 中實現。
為了不破壞三層思想:各層之間傳實體。本例中間獲得的dt轉為實體。細心的同學會發現,查詢到的dt結果賦值給實體物件的屬性,然後返回實體的過程,或許本例中的屬性值少,還是可以一個一個的傳遞的,但是有多個,或者說是上百個的時候,那麼還是一個一個的傳遞的麼,顯然是不行的,由此引出泛型集合。可以直接將dt轉換為一個包含實體的泛型集合,然後每次返回的時候,將集合作為結果返回。
敬請期待我的下一篇部落格:實體類返回泛型集合。
後續:不怕不知道,就怕不知道。。。。只要你想去學,就沒有學不會。告別說“不”
【VB.NET 機房收費系統】——對SqlHelper別說“不”