首先,什么是sqlHelper?sqlHelper是一个基于.NET Framework的数据库操作组件。
sqlHelper的用处或者或是好处是:用于简化你重复的去写那些数据库连接(sqlConnection),sqlCommand,sqlDataReader等等。sqlHelper 封装过后通常是只需要给方法传入一些参数如数据库连接字符串,sql参数等,就可以访问数据库了,很方便。
百度百科上对sqlHelper的使用方法介绍的很清楚,但是那些代码应该是C#编写的,与VB.NET还是有些不同。上网找过VB.NET版的sqlHelper类的代码,SqlHelper类VB.NET版,之前看的时候,有些看不懂,注释实在是太少,而且这两个里面都有用到事务,但是我对事务不是很了解。所以最后,参看了其他人的代码,整理了sqlHelper中4个方法。
这4个方法是自定义的。分别为ExecAddDelUpdate和ExecSelect,这两个都有有参和无参版。有参表示,有传入值,无参表示无传入值,比如查询一个表中的所有数据,就不需要任何条件,无参就好了。
而网上的sqlHelper方法一般都是ExecuteNonquery,ExecuteReader,前面是针对增删改,后面那个针对查询。还有ExecuteDataTable,可以返回DataTable类型的结果,就可以和DataGridView控件绑定数据。
Imports System.Data.sqlClient Imports System.Configuration '必须要在管理器中添加引用 Public Class sqlHelper '定义变量 '获得数据库的连接字符串 Private ReadOnly strConnection As String = ConfigurationManager.AppSettings("strConnection") '设置连接 Dim conn As sqlConnection = New sqlConnection(strConnection) '定义cmd命令 Dim cmd As New sqlCommand ''' <summary> ''' 执行增删改三个操作,(有参)返回值为Integer类型,确认是否执行成功 ''' </summary> ''' <param name="cmdText">需要执行语句,一般是sql语句,也有存储过程</param> ''' <param name="cmdType">判断sql语句的类型,一般都不是存储过程</param> ''' <param name="sqlParams">参数数组,无法确认有多少参数</param> ''' <returns></returns> ''' <remarks></remarks> Public Function ExecAddDelUpdate(ByVal cmdText As String,ByVal cmdType As CommandType,ByVal sqlParams As sqlParameter()) As Integer '将传入的值,分别为cmd的属性赋值 cmd.Parameters.AddRange(sqlParams) '将参数传入 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">需要执行语句,一般都不是存储过程</param> ''' <returns>Interger,受影响的行数</returns> ''' <remarks>2013年2月2日8:19:59</remarks> Public Function ExecAddDelUpdate(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">需要执行语句,一般都不是存储过程</param> ''' <param name="sqlParams">传入的参数</param> ''' <returns></returns> ''' <remarks></remarks> Public Function ExecSelect(ByVal cmdText As String,ByVal sqlParams 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(sqlParams) '参数添加 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> ''' 执行查询的操作,一般都不是存储过程</param> ''' <returns>dataTable,查询到的表格</returns> ''' <remarks></remarks> Public Function ExecSelect(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 Sub End Class
然后D层的代码就这样写。这是查询销卡记录,并且需要返回DataTable类型的值。
Public Function SelectCancelCard(ByVal startDate As String,ByVal endDate As String) As DataTable 'SQL查询语句 strsql = "Select cardNo as 卡号,refund as 退还金额,cancelDate as 退还日期,cancelTime as 退还时间,isCheckout as 结账状态,teacher as 结账教师 from T_CancelCard where cancelDate between @startDate and @endDate" '设置参数 Dim sqlParams As sqlParameter() = { New sqlParameter("@startDate",startDate),New sqlParameter("@endDate",endDate) } '执行 Return sqlHelper.ExecSelect(strsql,CommandType.Text,sqlParams) End Function