sqlhelper vb.net版

本文介绍了一个SQL操作助手类,该类提供了多种静态方法用于执行SQL命令,如执行非查询操作、执行读取操作等,并支持参数缓存以提高性能。
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Collections
Public MustInherit Class SqlHelper
''' <summary>
''' 哈希表:缓存参数
''' </summary>
''' <remarks></remarks>
Public Shared parmCache As Hashtable = Hashtable.Synchronized(New Hashtable())
''' <summary>
'''
''' </summary>
''' <param name="connectionString"></param>
''' <param name="cmdType"></param>
''' <param name="cmdText"></param>
''' <param name="commandParameters">ParamArray 表示函数参数个数不确定C#中为params</param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function ExecuteNonquery(ByVal connectionString As String, ByVal cmdType As CommandType, ByVal cmdText As String, ByVal ParamArray commandParameters As SqlParameter()) As Int32
Dim cmd As SqlCommand = New SqlCommand
Using conn As SqlConnection = New SqlConnection(connectionString)
PrepareCommand(cmd, conn, Nothing, cmdType, cmdText, commandParameters)
Dim val As Int32 = cmd.ExecuteNonQuery()
cmd.Parameters.Clear()
Return val
End Using
End Function
''' <summary>
'''
''' </summary>
''' <param name="connection"></param>
''' <param name="cmdType"></param>
''' <param name="cmdText"></param>
''' <param name="commandParameters">ParamArray 表示函数参数个数不确定C#中为params</param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function ExecuteNonQuery(ByVal connection As SqlConnection, ByVal cmdType As CommandType, ByVal cmdText As String, ByVal ParamArray commandParameters As SqlParameter()) As Int32
Dim cmd As SqlCommand = New SqlCommand
PrepareCommand(cmd, connection, Nothing, cmdType, cmdText, commandParameters)
Dim val As Int32 = cmd.ExecuteNonQuery()
cmd.Parameters.Clear()
Return val
End Function
''' <summary>
'''
''' </summary>
''' <param name="trans"></param>
''' <param name="cmdType"></param>
''' <param name="cmdText"></param>
''' <param name="commandParameters">ParamArray 表示函数参数个数不确定C#中为params</param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function ExecuteNonQuery(ByVal trans As SqlTransaction, ByVal cmdType As CommandType, ByVal cmdText As String, ByVal ParamArray commandParameters As SqlParameter()) As Int32
Dim cmd As SqlCommand = New SqlCommand
PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters)
Dim val As Int32 = cmd.ExecuteNonQuery()
cmd.Parameters.Clear()
Return val
End Function
''' <summary>
''' 返回数据集,可以包含多个表,这是我自己加上的,用以返回数据集,表
''' </summary>
''' <param name="connectionString"></param>
''' <param name="cmdType"></param>
''' <param name="cmdText"></param>
''' <param name="commandParameters"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function ExecuteDataSet(ByVal connectionString As String, ByVal cmdType As CommandType, ByVal cmdText As String, ByVal ParamArray commandParameters As SqlParameter()) As DataSet
Dim cmd As SqlCommand = New SqlCommand
Using conn As SqlConnection = New SqlConnection(connectionString)
PrepareCommand(cmd, conn, Nothing, cmdType, cmdText, commandParameters)
Dim adp As SqlDataAdapter = New SqlDataAdapter(cmd)
Dim ds As DataSet = New DataSet
Try
adp.Fill(ds)
cmd.Parameters.Clear()
Finally
adp.Dispose()
End Try
Return ds
End Using
End Function
''' <summary>
'''
''' </summary>
''' <param name="connectionString"></param>
''' <param name="cmdType"></param>
''' <param name="cmdText"></param>
''' <param name="commandParameters">ParamArray 表示函数参数个数不确定C#中为params</param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function ExecuteReader(ByVal connectionString As String, ByVal cmdType As CommandType, ByVal cmdText As String, ByVal ParamArray commandParameters As SqlParameter()) As SqlDataReader
Dim cmd As SqlCommand = New SqlCommand
Dim conn As SqlConnection = New SqlConnection(connectionString)
Try
PrepareCommand(cmd, conn, Nothing, cmdType, cmdText, commandParameters)
Dim rdr As SqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
cmd.Parameters.Clear()
Return rdr
Catch ex As Exception
conn.Close()
Throw
End Try
End Function
''' <summary>
'''
''' </summary>
''' <param name="connectionString"></param>
''' <param name="cmdType"></param>
''' <param name="cmdText"></param>
''' <param name="commandParameters">ParamArray 表示函数参数个数不确定C#中为params</param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function ExecuteScalar(ByVal connectionString As String, ByVal cmdType As CommandType, ByVal cmdText As String, ByVal ParamArray commandParameters As SqlParameter()) As Object
Dim cmd As SqlCommand = New SqlCommand
Using connection As SqlConnection = New SqlConnection(connectionString)
PrepareCommand(cmd, connection, Nothing, cmdType, cmdText, commandParameters)
Dim val As Object = cmd.ExecuteScalar()
cmd.Parameters.Clear()
Return val
End Using
End Function
''' <summary>
'''
''' </summary>
''' <param name="connection"></param>
''' <param name="cmdType"></param>
''' <param name="cmdText"></param>
''' <param name="commandParameters">ParamArray 表示函数参数个数不确定C#中为params</param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function ExecuteScalar(ByVal connection As SqlConnection, ByVal cmdType As CommandType, ByVal cmdText As String, ByVal ParamArray commandParameters As SqlParameter()) As Object
Dim cmd As SqlCommand = New SqlCommand
PrepareCommand(cmd, connection, Nothing, cmdType, cmdText, commandParameters)
Dim val As Object = cmd.ExecuteScalar()
cmd.Parameters.Clear()
Return val
End Function
''' <summary>
''' add parameter array to the cache
''' </summary>
''' <param name="cacheKey"></param>
''' <param name="commandParameters">an array of SqlParamters to be cached</param>
''' <remarks></remarks>
Public Shared Sub CacheParameters(ByVal cacheKey As String, ByVal ParamArray commandParameters As SqlParameter())
parmCache(cacheKey) = commandParameters
End Sub

Public Shared Function GetCachedParameters(ByVal cacheKey As String) As SqlParameter()
Dim cachedParms As SqlParameter() = CType(parmCache(cacheKey), SqlParameter())
If cachedParms Is Nothing Then Return Nothing
Dim clonedParms(cachedParms.Length - 1) As SqlParameter
Dim i As Integer
For i = 0 To cachedParms.Length - 1
clonedParms(i) = CType(CType(cachedParms(i), ICloneable).Clone(), SqlParameter)
Next
Return clonedParms
End Function
''' <summary>
'''
''' </summary>
''' <param name="cmd"></param>
''' <param name="conn"></param>
''' <param name="trans"></param>
''' <param name="cmdType"></param>
''' <param name="cmdText"></param>
''' <param name="cmdParms"></param>
''' <remarks></remarks>
Private Shared Sub PrepareCommand(ByVal cmd As SqlCommand, ByVal conn As SqlConnection, ByVal trans As SqlTransaction, ByVal cmdType As CommandType, ByVal cmdText As String, ByVal cmdParms As SqlParameter())
If conn.State <> ConnectionState.Open Then conn.Open()
cmd.Connection = conn
cmd.CommandText = cmdText
If trans IsNot Nothing Then cmd.Transaction = trans
cmd.CommandType = cmdType
If cmdParms IsNot Nothing Then
Dim parm As SqlParameter
For Each parm In cmdParms
cmd.Parameters.Add(parm)
Next
End If
End Sub
End Class
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值