是经典ASP过度杀伤的连接类吗?

时间:2012-08-14 18:03:01

标签: class asp-classic

目前我遇到了一些经典的asp文件,但我想整合一些代码。我发现了这个并希望得到一个意见。这有点矫枉过正吗?一个健壮的连接类是否有用?我打算尽力创造一个关注点,我正在研究这个模型。由于我不能通过extends(我能找到)继承,我想我只是在每个模型文件中包含这个类:

http://www.sitepoint.com/forums/showthread.php?491770-Build-a-Database-Connections-Class-in-Classic-ASP

Class clsDatabaseConnections
    Private strConnection   ''# Connection string (change depending on what system we are using)
    Private objConn         ''# Connection object
    Private objComm         ''# Command Object
    Private objRS           ''# Recordset object

    Private Sub Class_Initialize()
        ''# What happens when the class is opened
        strConnection = "DRIVER={SQL Server}; ..........."

        Set objConn = Server.CreateObject("ADODB.Connection")
        objConn.ConnectionString = strConnection        
    End Sub

    Private Sub Class_Terminate()
        ''# What happens when the class is closed

        ''# Close connections
        If objConn.State <> 0 Then
            objConn.Close   
        End If
        Set objConn = Nothing
    End Sub         

    Public Sub SQLExecuteFromSQLString(ByRef strSQL)
        ''# Execute code and return nothing
        If objConn.State <> 0 Then
            objConn.Close
        End If  

        objConn.Execute strSQL      
    End Sub

    ''# This replicates the .NET ExecuteScalar
    Public Function ExecuteScalarFromSQLString(ByRef sSQL)
        ''# This is used when passing back single results. Replicating a .NET piece of functionality
        Dim objScalar
        Set objScalar = GetRecordSet(sSQL)

        If Not objScalar.EOF Then
            ExecuteScalar = objScalar(0)
        Else
            ''# Nothing returned
            ExecuteScalar = -1
        End If

        CloseRecordSet()
    End Function ''#ExecuteScalar

    Public Function GetRecordSetFromSQLString(ByRef strRS)
        If objConn.State <> 1 Then
            objConn.Open
        End If

        Set objRS = Server.CreateObject("ADODB.Recordset")
        objRS.Open strRS, objConn

        Set GetRecordSet = objRS
    End Function

    ''# Using SP code within class
    ''##########################################################################
    Public Sub CallSPNeedParams(ByRef strStoredProc)
        If objConn.State <> 1 Then
            objConn.Open
        End If

        If Not IsObject(objComm) Then
            Set objComm = Server.CreateObject("ADODB.Command") ''# This will be used for Stored Procedures
        End If

        With objComm
            .ActiveConnection = objConn
            .CommandText = strStoredProc
            .CommandType = adCmdStoredProc
        End With

        If Not IsObject(objRS) Then
            Set objRS = Server.CreateObject("ADODB.Recordset")
        End If

        Set objRS.ActiveConnection = objConn ''# Set connection
        Set objRS.Source = objComm  ''# Set source to use command object            
    End Sub

    Public Sub ApendParamsToRecordSet(ByRef Name, ByRef TypeParam, ByRef Direction, ByRef Size, ByRef Value)
        ''#Type adDate adDBDate, adVarChar, adChar, adBoolean
        If IsObject(objComm) Then
            objComm.Parameters.Append objComm.CreateParameter(Name, TypeParam, Direction, Size, Value)          
        End If
    End Sub

    Public Function GetRecordSetSPParams(ByRef strStoredProc)
        If strStoredProc = objComm.CommandText Then
            ''# This is being called for the right SP
            objRS.Open
            Set GetRecordSetSPParams = objRS

            ''# Need to clear out params from Command object
            Do While (objComm.Parameters.Count > 0)
                objComm.Parameters.Delete 0
            Loop

        End If
    End Function

    Public Sub CloseCommObject()
        If IsObject(objComm) Then
            Set objComm = Nothing
        End If
    End Sub
    ''##########################################################################

    Public Function ExecuteScalarSetSPParams(ByRef strStoredProc)
        ''# This is used when passing back single results. Replicating a .NET piece of functionality
        If strStoredProc = objComm.CommandText Then     
            objRS.Open
            If Not objRS.EOF Then
                ExecuteScalar = objRS(0)
            Else
                ''# Nothing returned
                ExecuteScalar = -1
            End If

            CloseRecordSet()
        End If
    End Function ''#ExecuteScalar               

    Public Sub ExecuteSPButNoRecordsReturned(ByRef strStoredProc)
        If strStoredProc = objComm.CommandText Then
            objComm.Execute
        End If
    End Sub ''#ExecuteSPButNoRecordsReturned()

    Public Sub CloseRecordSet() 
        If objRS.State <> 0 Then
            objRS.Close 
        End If

        Set objRS = Nothing
    End Sub

    Public Property Get ObjectConn()
        ObjectConn = objConn
    End Property    

    Public Property Let SwitchConnection(ByRef strConn)
        ''# Will allow user to change the connection from the default set up    
        strConnection = strConn
        Call SwitchConnection(strConnection)
    End Property

    Private Sub SwitchConnection(ByRef strConn)
        ''# Will allow user to change the connection from the default set up    
        strConnection = strConn
        If objConn.State <> adStateClosed Then
            objConn.ConnectionString = strConnection
        End If
    End Sub

End Class ''#clsDatabaseConnections

1 个答案:

答案 0 :(得分:1)

简单回答?这取决于。

如果你只有几个包含并使用这样一个类的文件,我会说创建这样一个类并重构包含文件是不值得的。

如果您有一个大型库或一组库,您认为它们有足够的时间进行淘汰/更换,请选择它。

在过去,我为大型数据相关的ASP库创建了类似的(虽然不是那么强大)类,将它们放在文件夹层次结构中,以便它们可以被众多应用程序使用。

除了简单之外,我从这样做中看到的最大好处是能够确保您的连接和其他资源得到正确关闭/管理......您不想激怒DBA;?)< / p>