Это программно плохая идея? - PullRequest
1 голос
/ 16 ноября 2011

В настоящее время я пытаюсь создать несколько ярлыков кодирования для нашего сайта.Прямо сейчас для запроса базы данных и возврата набора записей должны быть вызваны 2 функции:

GetDBConn возвращает открытый объект подключения ado к переданной строке подключения.

GetRS возвращаетобъект набора записей, основанный на соединении ado и sql, переданном внутрь.

set objConn = GetDBConn(connString, commandTimeout, connTimeout, cursorType)
set objRs   = GetRS(objConn, sql)

Я хочу, по сути, записать эти два как одну функцию, но мой вопрос на самом деле становится следующим ... Я уверен, что вы 'Вы должны закрыть и уничтожить ваши соединения ado, когда закончите с ними.Если я dim установлю соединение внутри новой функции, сделаю запрос к базе данных и верну набор записей, я не смогу закрыть и уничтожить соединение внутри функции, иначе набор записей, возвращаемый функцией, станет бесполезным (то есть этот объект соединенияникогда явно не закрываются / уничтожаются).Это нормально?Будет ли это иметь негативное влияние на SQL / веб-серверы?

Спасибо

Ответы [ 3 ]

2 голосов
/ 16 ноября 2011

Использование его для наборов записей, вероятно, не очень хорошая идея (слишком легко забыть закрыть их), однако открытие / закрытие соединения не должно быть проблемой. Я использую следующие две функции на всех своих старых классических сайтах ASP:

conn.asp * * 1004

<%
Dim oConn

Sub openConn()
    Set oConn = Server.CreateObject("ADODB.Connection")
    oConn.Open sConn 'connection string here'
End Sub

Sub closeConn()
    If IsObject(oConn) Then
        On Error Resume Next
        If oConn.State = 1 Then
            oConn.Close
        End If
        Set oConn = Nothing
        Err.Clear
        On Error Goto 0
    End If
End Sub
%>

Затем я включаю conn.asp и использую openConn() один раз вверху страницы и closeConn() внизу.

On Error Resume Next обычно рассматривается как практика "плохого кодирования", однако в этом случае я думаю, что это уместно, иначе вы будете получать ошибки на всех страницах, которые используете closeConn() для тех крайних случаев, когда oConn.State терпит неудачу по любой причине.

2 голосов
/ 16 ноября 2011

Не закрытие соединений вызовет проблемы с ресурсами вашего сервера SQL.В зависимости от вашего оборудования и количества устанавливаемых соединений, вы можете не заметить проблемы.Или это может сделать сервер недоступным ...

1 голос
/ 16 ноября 2011

Я всегда использовал dbhelper.asp, предоставленный справочным приложением MS FmStocks Функции всегда возвращают отключенный набор записей, поэтому у вас никогда не будет проблем

Функции такие, как эта:

Function RunSQLReturnRS(sqlstmt, params())
    On Error Resume next

    ' Create the ADO objects'
    Dim rs , cmd
    Set rs = server.createobject("ADODB.Recordset")
    Set cmd = server.createobject("ADODB.Command")

    ' Init the ADO objects  & the stored proc parameters'
    cmd.ActiveConnection = GetConnectionString()
    cmd.CommandText = sqlstmt
    cmd.CommandType = adCmdText
    cmd.CommandTimeout = 900 ' 15 minutes

    collectParams cmd, params

    ' Execute the query for readonly'
    rs.CursorLocation = adUseClient
    rs.Open cmd, , adOpenForwardOnly, adLockReadOnly
    If err.number > 0 then
        BuildErrorMessage()
        exit function
    end if

    ' Disconnect the recordset'
    Set cmd.ActiveConnection = Nothing
    Set cmd = Nothing
    Set rs.ActiveConnection = Nothing

    ' Return the resultant recordset'
    Set RunSQLReturnRS = rs

End Function
...