目前我正在尝试为我们的网站创建一些编码捷径。现在要查询数据库并返回一个记录集,必须调用2个函数:
GetDBConn
将一个开放的ado连接对象返回到传入的连接字符串。
GetRS
根据传入的ado连接和sql返回记录集对象。
set objConn = GetDBConn(connString, commandTimeout, connTimeout, cursorType)
set objRs = GetRS(objConn, sql)
我想基本上将这两个作为单个函数编写,但我的问题确实变成了这个...我很确定你应该在完成它们时关闭并销毁你的ado连接。如果我dim
新函数内部的连接,查询数据库并返回记录集,我无法关闭并销毁函数内部的连接,否则函数返回的记录集变得无用(即该连接)对象永远不会被明确地关闭/销毁)。这可以吗?它会对SQL / Web服务器产生负面影响吗?
由于
答案 0 :(得分:2)
不关闭连接会导致SQL Server资源出现问题。根据您的硬件和建立的连接数量,您可能不会注意到问题。或者它可能使服务器无法访问......
答案 1 :(得分:2)
将它用于记录集可能不是一个好主意(太容易忘记关闭它们),但是打开/关闭连接应该不是问题。我在所有遗留的经典ASP站点上使用以下两个函数:
conn.asp
:
<%
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 :(得分:1)
我一直使用MS参考应用FmStocks提供的dbhelper.asp 这些函数总是返回一个断开连接的记录集,所以你永远不会遇到麻烦
这些功能就像这样:
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