【ASP.Net】Pet Shop4.0学习笔记1,VB
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.ComponentModel
Namespace PetShop.DBUtility
''' <summary>
''' The SqlHelper class is intended to encapsulate high performance,
''' scalable best practices for common uses of SqlClient.
''' </summary>
Public MustInherit Class SQLHelper
'Database connection strings
Public Shared ReadOnly ConnectionStringLocalTransaction As String = ConfigurationManager.ConnectionStrings("SQLConnString1").ConnectionString
Public Shared ReadOnly ConnectionStringInventoryDistributedTransaction = ConfigurationManager.ConnectionStrings("SQLConnString2").ConnectionString
Public Shared ReadOnly ConnectionStringOrderDistributedTransaction = ConfigurationManager.ConnectionStrings("SQLConnString3").ConnectionString
Public Shared ReadOnly ConnectionStringProfile = ConfigurationManager.ConnectionStrings("SQLProfileConnString").ConnectionString
'Hashtable to store cached parameters
Private Shared parmCache As Hashtable = Hashtable.Synchronized(New Hashtable)
'''<summary>
'''Execute a SqlCommand (that returns no resultset) against the database specified in the connection string
'''using the provided parameters.
'''</summary>
'''<remarks>
'''e.g.:
''' int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
'''</remarks>
'''<param name="connectionString">a valid connection string for a SqlConnection</param>
'''<param name="cmdType">the CommandType (stored procedure, text, etc.)</param>
'''<param name="cmdText">the stored procedure name or T-SQL command</param>
'''<param name="commandParameters">an array of SqlParamters used to execute the command</param>
'''<returns>an int representing the number of rows affected by the command</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 SqlCommand = New SqlCommand
Using conn As SqlConnection = New SqlConnection(connectionString)
PrepareCommand(cmd, conn, Nothing, cmdType, cmdText, commandParameters)
Dim val As Integer = cmd.ExecuteNonQuery()
cmd.Parameters.Clear()
conn.Dispose()
Return val
End Using
End Function
'''<summary>
'''Execute a SqlCommand (that returns no resultset) against an existing database connection
'''using the provided parameters.
'''</summary>
'''<remarks>
'''e.g.:
''' int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
'''</remarks>
'''<param name="conection">an existing database connection</param>
'''<param name="cmdType">the CommandType (stored procedure, text, etc.)</param>
'''<param name="cmdText">the stored procedure name or T-SQL command</param>
'''<param name="commandParameters">an array of SqlParamters used to execute the command</param>
'''<returns>an int representing the number of rows affected by the command</returns>
Public Shared Function ExecuteNonQuery(ByVal conection As SqlConnection, ByVal cmdType As CommandType, ByVal cmdText As String, ByVal ParamArray commandParameters As SqlParameter())
Dim cmd As SqlCommand = New SqlCommand
PrepareCommand(cmd, conection, Nothing, cmdType, cmdText, commandParameters)
Dim val As Integer = cmd.ExecuteNonQuery()
cmd.Parameters.Clear()
Return val
End Function
'''<summary>
'''Execute a SqlCommand (that returns no resultset) using an existing SQL Transaction
'''using the provided parameters.
'''</summary>
'''<remarks>
'''e.g.:
''' int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
'''</remarks>
'''<param name="trans">an existing sql transaction</param>
'''<param name="cmdType">the CommandType (stored procedure, text, etc.)</param>
'''<param name="cmdText">the stored procedure name or T-SQL command</param>
'''<param name="commandParameters">an array of SqlParamters used to execute the command</param>
'''<returns>an int representing the number of rows affected by the command</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 SqlCommand = New SqlCommand()
PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters)
Dim val As Integer = cmd.ExecuteNonQuery()
cmd.Parameters.Clear()
Return val
End Function
'''<summary>
'''Execute a SqlCommand that returns a resultset against the database specified in the connection string
'''using the provided parameters.
'''</summary>
'''<remarks>
'''e.g.:
''' SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
'''</remarks>
'''<param name="connectionString">a valid connection string for a SqlConnection</param>
'''<param name="cmdType">the CommandType (stored procedure, text, etc.)</param>
'''<param name="cmdText">the stored procedure name or T-SQL command</param>
'''<param name="commandParameters">an array of SqlParamters used to execute the command</param>
'''<returns>A SqlDataReader containing the results</returns>
Public Shared Function ExcuteReader(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()
ExceptionManagement.SystemError.SystemLog(ex.Message)
Throw
End Try
End Function
'''<summary>
'''Execute a SqlCommand that returns the first column of the first record against the database specified in the connection string
'''using the provided parameters.
'''</summary>
'''<remarks>
'''e.g.:
''' Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
'''</remarks>
'''<param name="connectionString">a valid connection string for a SqlConnection</param>
'''<param name="cmdType">the CommandType (stored procedure, text, etc.)</param>
'''<param name="cmdText">the stored procedure name or T-SQL command</param>
'''<param name="commandParameters">an array of SqlParamters used to execute the command</param>
'''<returns>An object that should be converted to the expected type using Convert.To{Type}</returns>
Public Shared Function ExcuteScalar(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)
Dim val As Object = cmd.ExecuteScalar
cmd.Parameters.Clear()
connection.Dispose()
Return val
End Using
End Function
'''<summary>
''' Execute a SqlCommand that returns the first column of the first record against an existing database connection
'''using the provided parameters.
'''</summary>
'''<remarks>
'''e.g.:
''' Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
'''</remarks>
'''<param name="connection">an existing database connection</param>
'''<param name="cmdType">the CommandType (stored procedure, text, etc.)</param>
'''<param name="cmdText">the stored procedure name or T-SQL command</param>
'''<param name="commandParameters">an array of SqlParamters used to execute the command</param>
'''<returns>An object that should be converted to the expected type using Convert.To{Type}</returns>
Public Shared Function ExcuteScalar(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()
connection.Dispose()
Return val
End Function
''' <summary>
''' add parameter array to the cache
''' </summary>
''' <param name="cacheKey">Key to the parameter cache</param>
''' <param name="commandParameters">an array of SqlParamters to be cached</param>
Public Shared Sub CacheParameters(ByVal cacheKey As String, ByVal ParamArray commandParameters As SqlParameter())
parmCache(cacheKey) = commandParameters
End Sub
''' <summary>
''' Retrieve cached parameters
''' </summary>
''' <param name="cacheKey">key used to lookup parameters</param>
''' <returns>Cached SqlParamters array</returns>
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
End If
Dim clonedParms As SqlParameter() = New SqlParameter(cachedParms.Length - 1) {}
Dim i As Integer
For i = 0 To cachedParms.Length - 1
clonedParms(i) = DirectCast(DirectCast(cachedParms(i), ICloneable).Clone(), SqlParameter)
Next
Return clonedParms
End Function
'''<summary>
'''Prepare a command for execution
'''</summary>
'''<param name="cmd">SqlCommand object</param>
'''<param name="conn">SqlConnection object</param>
'''<param name="trans">SqlTransaction object</param>
'''<param name="cmdType">Cmd type e.g. stored procedure or text</param>
'''<param name="cmdText">Command text, e.g. Select * from Products</param>
'''<param name="cmdParms">SqlParameters to use in the command</param>
Private Shared Sub PrepareCommand(ByRef 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
MSDN
DirectCast 关键字:
引入类型转换操作。该关键字的使用方法与 CType 关键字相同,如下列所示:
Dim Q As Object = 2.37 ' Requires Option Strict to be Off.
Dim I As Integer = CType(Q, Integer) ' Succeeds.
Dim J As Integer = DirectCast(Q, Integer) ' Fails.
这两个关键字都将要转换的表达式作为第一个参数,而将要转换成的类型作为第二个参数。如果未定义表达式的数据类型与第二个参数所指定的数据类型之间的转换,那么这两种转换都会失败。
这两个关键字之间的差别在于:只要定义了表达式与类型之间的有效转换,CType 即可成功,而 DirectCast 则要求对象变量的运行时类型与指定的类型相同。不过,如果表达式的指定类型和运行时类型相同,则 DirectCast 的运行时性能比 CType 的运行时性能好。
在上例中,Q
的运行时类型为 Double。CType 因为 Double 可以转换成 Integer 而成功了,DirectCast 则因为 Q
的运行时类型不是 Integer 而失败了。
如果参数类型不匹配,DirectCast 会引发 InvalidCastException 错误。
Using...End Using :当在某个代码段中使用了类的实例,而希望无论因为什么原因,只要离开了这个代码段就自动调用这个类实例的Dispose。
使用using会自动调用引用对象的Dispose方法。可以看成try...catch的缩写。
ConfigurationManager.ConnectionStrings 属性
获取当前应用程序默认配置的 ConnectionStringsSection 数据。
也就是web.config文件中
<connectionStrings>
</connectionStrings>
之间的内容
ConfigurationManager.appSettings属性
获取当前应用程序默认配置的 AppSettingsSection 数据。
也就是web.config文件中
<AppSettings>
</AppSettings>
之间的内容
System.Collections.Hashtable
是用来表示一组组key/value结构的容器。其结构中Key用来快速查找。