这样行吗?望大哥们帮忙
我想用一个应用级变量记录数据库连接,便可以在整个应用程序中用到了
这样写老是出错,请问该怎么做呢?
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnStart
'Active a odbc data source connection
Dim conData 'as Connection
Set conData=Server.CreateObject("ADODB.Connection")
conData.Open "Driver={Microsoft Access Driver}; DBQ=" & _
Server.MapPath("enterprise.mdb")
Application("conData")=conData
conData.Close
Set conData=nothing
End Sub
Sub Application_OnEnd
Application("conData")=Null
End Sub
</SCRIPT>
问题点数:59、回复次数:5Top
1 楼rouser(流淌的小溪)回复于 2001-11-28 11:16:43 得分 0
是不是要把
conData.Close
Set conData=nothing
放到
Sub Application_OnEnd
中去呢?Top
2 楼balloy()回复于 2001-11-28 11:22:14 得分 59
Application("conData")=conData
conData.Close
Set conData=nothing
你把conData立即施放了,当然不会有用。同意小火的解决方案。
另外,我以前从别的地方看来的,一般不推荐将conn对象放在Application中。如下:
----------------------------------------
技巧 5:不要将数据库连接缓存在 Application 或 Session 对象中
缓存 ADO 连接通常是很糟糕的策略。如果一个 Connection 对象存储在 Application 对象中,并在所有的页面中使用,那么所有页面将争抢这一连接。如果 Connection 对象存储在 ASP Session 对象中,那么将为每个用户创建数据库连接。这就会使连接池的优势荡然无存,并给 Web 服务器和数据库带来不必要的压力。 可以不缓存数据库连接,而是在使用 ADO 的每个 ASP 页面中创建和删除 ADO 对象。这是很有效的,因为 IIS 内嵌了数据库连接池。更准确地说,IIS 自动启用 OLEDB 和 ODBC 连接池。这就能确保在每个页面上创建和删除连接将是有效的。 因为连接的记录集存储一个到数据库连接的引用,所以您不应将连接的记录集缓存在 Application 或 Session 对象中。但是,您可以安全地缓存断开连接的记录集,它们不保存到其数据连接的引用。要断开记录集连接,执行下面的两个步骤: Set rs = Server.CreateObject(?ADODB.RecordSet?)rs.CursorLocation = adUseClient ' step 1' Populate the recordset with datars.Open strQuery, strProv' Now disconnect the recordset from the data provider and data sourcers.ActiveConnection = Nothing ' step 2有关连接池的更详细信息,可以在 ADO 和 SQL Server 参考资料中找到。
Top
3 楼karma(无为MS MVP)回复于 2001-11-28 11:38:43 得分 0
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnStart
'Active a odbc data source connection
Dim conData 'as Connection
Set conData=Server.CreateObject("ADODB.Connection")
conData.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("enterprise.mdb")
set Application("conData")=conData
Set conData=nothing
End Sub
Sub Application_OnEnd
Application("conData").close
set Application("conData")=nothing
End Sub
</SCRIPT>
warning: storing a connection object in an application variable is bad
Top
4 楼rouser(流淌的小溪)回复于 2001-11-28 11:49:15 得分 0
to balloy()
不将记录集缓冲
只是缓冲库连接
在中个应用中只有唯一的
一个库连接存在于Application变量中
应该是节约资源的呀
是不是和包含文件的效率相当呀?Top
5 楼balloy()回复于 2001-11-28 21:02:05 得分 0
to rouser(小火):
如果一个 Connection 对象存储在 Application 对象中,并在所有的页面中使用,那么所有页面将争抢这一连接。如果 Connection 对象存储在 ASP Session 对象中,那么将为每个用户创建数据库连接。这就会使连接池的优势荡然无存,并给 Web 服务器和数据库带来不必要的压力。 可以不缓存数据库连接,而是在使用 ADO 的每个 ASP 页面中创建和删除 ADO 对象。这是很有效的,因为 IIS 内嵌了数据库连接池。更准确地说,IIS 自动启用 OLEDB 和 ODBC 连接池。这就能确保在每个页面上创建和删除连接将是有效的。 因为连接的记录集存储一个到数据库连接的引用,所以您不应将连接的记录集缓存在 Application 或 Session 对象中。
------------------------------------------------------------------
上面这些话都是我拷贝过来的,其实,我以前也想过将连接对象存在于Application变量中。
不过,上面的话虽然不是我想的,我认为还是有道理的。如果库连接存在于Application变量中,所有页面将争抢这一连接(你可以假设一下所有的页面都用到了conn.BeginTrans等操作),虽然IIS的内部实现我并不太了解,不过我可以想象这样可能效率不高。
另外,在InterDev中建立一个工程,它的Global.asa文件中就是把连接字符串放在Application对象中,而不是连接对象,可能是有一定道理的。Top




