SqlHelper

Posted on 2010-12-06 22:25  gmtyt  阅读(308)  评论(0)    收藏  举报
代码
'这是在网上找的中文解释的SqlHelper
Imports System

Imports System.Configuration

Imports System.Data

Imports System.Data.SqlClient

Imports System.Collections



Namespace com.DataAccess




' <summary>

' SqlHelper类提供很高的数据访问性能,

' 使用SqlClient类的通用定义.

' </summary>

Public MustInherit Class SqlHelper

Public Shared Function GetConnStr() As String

Return My.Settings.constr

End Function



'定义数据库连接串

' Public Shared ReadOnly ConnectionStringLocalTransaction As String = ConfigurationManager.ConnectionStrings("TestConnectionString").ConnectionString
Public Shared ReadOnly ConnectionStringLocalTransaction As String = GetConnStr()

'public static readonly string ConnectionStringInventoryDistributedTransaction = ConfigurationManager.ConnectionStrings["SQLConnString2"].ConnectionString;

'public static readonly string ConnectionStringOrderDistributedTransaction = ConfigurationManager.ConnectionStrings["SQLConnString3"].ConnectionString;

'public static readonly string ConnectionStringProfile = ConfigurationManager.ConnectionStrings["SQLProfileConnString"].ConnectionString;



' 存贮Cache缓存的Hashtable集合

Private Shared parmCache As Hashtable = Hashtable.Synchronized(New Hashtable())



' <summary>

' 使用连接字符串,执行一个SqlCommand命令(没有记录返回)

' 使用提供的参数集.

' </summary>

' <remarks>

' 示例:

' int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));

' </remarks>

' <param name="connectionString">一个有效的SqlConnection连接串</param>

' <param name="commandType">命令类型CommandType(stored procedure, text, etc.)</param>

' <param name="commandText">存贮过程名称或是一个T-SQL语句串</param>

' <param name="commandParameters">执行命令的参数集</param>

' <returns>受此命令影响的行数</returns>

Public Shared Function ExecuteNonQuery(ByVal connectionString As String, ByVal cmdType As CommandType, ByVal cmdText As String, ByVal ParamArray commandParameters As SqlParameter()) As Integer




Dim cmd As New SqlCommand()



Using conn As New SqlConnection(connectionString)


PrepareCommand(cmd, conn,
Nothing, cmdType, cmdText, commandParameters)

Dim val As Integer = cmd.ExecuteNonQuery()

cmd.Parameters.Clear()


Return val
End Using

End Function



' <summary>

' 在一个存在的连接上执行数据库的命令操作

' 使用提供的参数集.

' </summary>

' <remarks>

' e.g.:

' int result = ExecuteNonQuery(connection, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));

' </remarks>

' <param name="conn">一个存在的数据库连接对象</param>

' <param name="commandType">命令类型CommandType (stored procedure, text, etc.)</param>

' <param name="commandText">存贮过程名称或是一个T-SQL语句串</param>

' <param name="commandParameters">执行命令的参数集</param>

' <returns>受此命令影响的行数</returns>

Public Shared Function ExecuteNonQuery(ByVal connection As SqlConnection, ByVal cmdType As CommandType, ByVal cmdText As String, ByVal ParamArray commandParameters As SqlParameter()) As Integer

Dim cmd As New SqlCommand()



PrepareCommand(cmd, connection,
Nothing, cmdType, cmdText, commandParameters)

Dim val As Integer = cmd.ExecuteNonQuery()

cmd.Parameters.Clear()

Return val

End Function



' <summary>

' 在一个事务的连接上执行数据库的命令操作

' 使用提供的参数集.

' </summary>

' <remarks>

' e.g.:

' int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));

' </remarks>

' <param name="trans">一个存在的事务</param>

' <param name="commandType">命令类型CommandType (stored procedure, text, etc.)</param>

' <param name="commandText">存贮过程名称或是一个T-SQL语句串</param>

' <param name="commandParameters">执行命令的参数集</param>

' <returns>受此命令影响的行数</returns>

Public Shared Function ExecuteNonQuery(ByVal trans As SqlTransaction, ByVal cmdType As CommandType, ByVal cmdText As String, ByVal ParamArray commandParameters As SqlParameter()) As Integer


Dim cmd As New SqlCommand()

PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters)

Dim val As Integer = cmd.ExecuteNonQuery()

cmd.Parameters.Clear()

Return val

End Function



' <summary>

' 在一个连接串上执行一个命令,返回一个SqlDataReader对象

' 使用提供的参数.

' </summary>

' <remarks>

' e.g.:

' SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));

' </remarks>

' <param name="connectionString">一个有效的SqlConnection连接串</param>

' <param name="commandType">命令类型CommandType(stored procedure, text, etc.)</param>

' <param name="commandText">存贮过程名称或是一个T-SQL语句串</param>

' <param name="commandParameters">执行命令的参数集</param>

' <returns>一个结果集对象SqlDataReader</returns>

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 New SqlCommand()

Dim conn As New SqlConnection(connectionString)



' 如果不存在要查询的对象,则发生异常

' 连接要关闭

' CommandBehavior.CloseConnection在异常时不发生作用

Try


PrepareCommand(cmd, conn,
Nothing, cmdType, cmdText, commandParameters)

Dim rdr As SqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)

cmd.Parameters.Clear()


Return rdr

Catch


conn.Close()


Throw
End Try

End Function



' <summary>

' 在一个连接串上执行一个命令,返回表中第一行,第一列的值

' 使用提供的参数.

' </summary>

' <remarks>

' e.g.:

' Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));

' </remarks>

' <param name="connectionString">一个有效的SqlConnection连接串</param>

' <param name="commandType">命令类型CommandType(stored procedure, text, etc.)</param>

' <param name="commandText">存贮过程名称或是一个T-SQL语句串</param>

' <param name="commandParameters">执行命令的参数集</param> /// <returns>返回的对象,在使用时记得类型转换</returns>

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 New SqlCommand()



Using connection As 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>

' <remarks>

' e.g.:

' Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));

' </remarks>

' <param name="connectionString">一个有效的SqlConnection连接</param>

' <param name="commandType">命令类型CommandType(stored procedure, text, etc.)</param>

' <param name="commandText">存贮过程名称或是一个T-SQL语句串</param>

' <param name="commandParameters">执行命令的参数集</param> /// <returns>返回的对象,在使用时记得类型转换</returns>

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 New SqlCommand()



PrepareCommand(cmd, connection,
Nothing, cmdType, cmdText, commandParameters)

Dim val As Object = cmd.ExecuteScalar()

cmd.Parameters.Clear()

Return val

End Function



' <summary>

' 在缓存中添加参数数组

' </summary>

' <param name="cacheKey">参数的Key</param>

' <param name="cmdParms">参数数组</param>

Public Shared Sub CacheParameters(ByVal cacheKey As String, ByVal ParamArray commandParameters As SqlParameter())


parmCache(cacheKey)
= commandParameters

End Sub



' <summary>

' 提取缓存的参数数组

' </summary>

' <param name="cacheKey">查找缓存的key</param>

' <returns>返回被缓存的参数数组</returns>

Public Shared Function GetCachedParameters(ByVal cacheKey As String) As SqlParameter()


Dim cachedParms As SqlParameter() = DirectCast(parmCache(cacheKey), SqlParameter())



If cachedParms Is Nothing Then

Return Nothing
End If



Dim clonedParms As SqlParameter() = New SqlParameter(cachedParms.Length) {}



Dim i As Integer = 0, j As Integer = cachedParms.Length
While i < j

clonedParms(i)
= DirectCast((DirectCast(cachedParms(i), ICloneable)).Clone(), SqlParameter)
System.Math.Max(System.Threading.Interlocked.Increment(i), i
- 1)
End While



Return clonedParms

End Function



' <summary>

' 提供一个SqlCommand对象的设置

' </summary>

' <param name="cmd">SqlCommand对象</param>

' <param name="conn">SqlConnection 对象</param>

' <param name="trans">SqlTransaction 对象</param>

' <param name="cmdType">CommandType 如存贮过程,T-SQL</param>

' <param name="cmdText">存贮过程名或查询串</param>

' <param name="cmdParms">命令中用到的参数集</param>

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()
End If



cmd.Connection
= conn

cmd.CommandText
= cmdText



If trans IsNot Nothing Then

cmd.Transaction
= trans
End If



cmd.CommandType
= cmdType



If cmdParms IsNot Nothing Then


For Each parm As SqlParameter In cmdParms

cmd.Parameters.Add(parm)

Next
End If

End Sub

End Class

End Namespace

 

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3