日期:2014-05-17  浏览次数:20886 次

Global.asa中定義<Object>的問題
Global.asa中內容:
<object   RUNAT=server   scope=Session   ID=g_conn   ProgID= "ADODB.Connection ">   </object>

在asp文件里,就不能再用
set   g_conn   =   Server.CreateObject( "ADODB.Connection ")

但可以這樣操作:
g_conn.open   application( "connstring ")

請教:
<object> 里定義的,是不是就不需要再CreateObject了,還是有其他原因

謝謝




------解决方案--------------------
已经创建了object.
------解决方案--------------------
你在global.asa中使用 <object> 在Session中创建了ADODB.Connection后,在用户初次访问页面后IIS自动为其创建对象实例,在session期间都可以直接用,不需要用CreateObject创建。

但问题在于,创建在Session中的对象的线程模型是有要求的,一般asp系统内置的对象包括Scripting.*, ADODB.*(虽然ADO有办法将线程模型改为自由线程)都不适合于保存在Session中,易造成100%CPU问题。此外,Session中保存数据库连接的做法看似不需要每次重新创建连接,实际上是个似是而非的做法,会影响ODBC连接池的使用,远不如在页面内直接创建连接,并及时关闭且设为Nothing。

建议尽量不使用session,非要使用的话,就只保存一些数字,字符串。
------解决方案--------------------
CreateObject是动态创建, <object> 是静态创建,两者根据情况用其一即可。

还是不要将Connection放在session为好。