浅谈SqlHelper

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 17:17   1359   0

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控件绑定数据。

[vb]

Imports System.Data.SqlClient

Imports System.Configuration '必须要在管理器中添加引用

Public Class SqlHelper

'定义变量

'获得数据库的连接字符串

Private ReadOnlystrConnection As String =ConfigurationManager.AppSettings("strConnection")

'设置连接

Dim conn As SqlConnection =New SqlConnection(strConnection)

'定义cmd命令

Dim cmd As New SqlCommand

''' <summary>

''' 执行增删改三个操作,(有参)返回值为Boolean类型,确认是否执行成功

''' </summary>

''' <paramname="cmdText">需要执行语句,一般是Sql语句,也有存储过程</param>

''' <paramname="cmdType">判断Sql语句的类型,一般都不是存储过程</param>

''' <paramname="sqlParams">参数数组,无法确认有多少参数</param>

'''<returns></returns>

'''<remarks></remarks>

Public FunctionExecAddDelUpdate(ByVal cmdText As String, ByVal cmdType As CommandType, ByValsqlParams 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 AsException

Return 0 '如果出错,返回0

Finally

Call CloseConn(conn)

Call CloseCmd(cmd)

End Try

End Function

''' <summary>

''' 执行增删改三个操作,(无参)

''' </summary>

''' <paramname="cmdText">需要执行语句,一般是Sql语句,也有存储过程</param>

''' <paramname="cmdType">判断Sql语句的类型,一般都不是存储过程</param>

''' <returns>Interger,受影响的行数</returns>

''' <remarks>2013年2月2日8:19:59</remarks>

Public FunctionExecAddDelUpdate(ByVal cmdText As String, ByVal cmdType As CommandType) AsInteger

'为要执行的命令cmd赋值

cmd.CommandText= cmdText '先是查询的sql语句

cmd.CommandType= cmdType '设置Sql语句如何解释

cmd.Connection= conn '设置连接

'执行操作

Try

conn.Open()

Return cmd.ExecuteNonQuery()

Catch ex AsException

Return 0

Finally

Call CloseConn(conn)

Call CloseCmd(cmd)

End Try

End Function

''' <summary>

''' 执行查询的操作,(有参),参数不限

''' </summary>

''' <paramname="cmdText">需要执行语句,一般是Sql语句,也有存储过程</param>

''' <param name="cmdType">判断Sql语句的类型,一般都不是存储过程</param>

''' <paramname="sqlParams">传入的参数</param>

'''<returns></returns>

'''<remarks></remarks>

Public FunctionExecSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByValsqlParams As SqlParameter()) As DataTable

Dim sqlAdapterAs SqlDataAdapter

Dim dt As NewDataTable

Dim ds As NewDataSet

'还是给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 AsException

MsgBox("查询失败", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle),"警告")

Finally '最后一定要销毁cmd

Call CloseCmd(cmd)

End Try

Return dt

End Function

''' <summary>

''' 执行查询的操作,(无参)

''' </summary>

''' <paramname="cmdText">需要执行语句,一般是Sql语句,也有存储过程</param>

''' <paramname="cmdType">判断Sql语句的类型,一般都不是存储过程</param>

''' <returns>dataTable,查询到的表格</returns>

'''<remarks></remarks>

Public FunctionExecSelect(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable

Dim sqlAdapterAs SqlDataAdapter

Dim ds As NewDataSet

'还是给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 AsException

Return Nothing

Finally '最后一定要销毁cmd

Call CloseCmd(cmd)

End Try

End Function

''' <summary>

''' 关闭连接

''' </summary>

''' <paramname="conn">需要关闭的连接</param>

'''<remarks></remarks>

Public Sub CloseConn(ByValconn As SqlConnection)

If (conn.State<> ConnectionState.Closed) Then '如果没有关闭

conn.Close() '关闭连接

conn = Nothing '不指向原对象

End If

End Sub

''' <summary>

''' 关闭命令

''' </summary>

''' <paramname="cmd">需要关闭的命令</param>

'''<remarks></remarks>

Public Sub CloseCmd(ByVal cmdAs SqlCommand)

If NotIsNothing(cmd) Then '如果cmd命令存在

cmd.Dispose() '销毁

cmd = Nothing

End If

End Sub

End Class

然后D层的代码就这样写。这是查询销卡记录,并且需要返回DataTable类型的值。

[vb]

Public Function SelectCancelCard(ByValstartDate 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 AsSqlParameter() = {

New SqlParameter("@startDate", startDate),

New SqlParameter("@endDate", endDate)

}

'执行

ReturnsqlHelper.ExecSelect(strSql, CommandType.Text, sqlParams)

End Function

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP