【ASP.Net】Pet Shop4.0学习笔记1,VB

最近在学ASP.Net,在网上找了许久也没找到VB版的Pet Shop,只好下了C#的自己翻译,就当熟悉C#语法了。

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 的运行时类型为 DoubleCType 因为 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用来快速查找。