Alb*_*reo 3 vbscript adodb asp-classic
我是一个ASP.NET C#的人,他必须回到经典的ASP,并需要一些帮助.
首先,看看这两个函数(我知道在VBScript中注释是由声明'而不是由声明的//荧光笔在这里搞砸了').
第一版:
Function DoThing
Dim Connection, Command, Recordset
Set Connection = Server.CreateObject("ADODB.Connection")
Set Command = Server.CreateObject("ADODB.Command")
Set Recordset = Server.CreateObject("ADODB.Recordset")
Connection.Open "blah blah blah"
Command.CommandText = "blah blah blah"
Recordset.Open Command, Connection
If Recordset.EOF = False Then
While Recordset.EOF = False Then
// Do stuff.
Recordset.MoveNext
WEnd
Else
// Handle error.
End If
Recordset.Close
Connection.Close
Set Recordset = Nothing
Set Command = Nothing
Set Connection = Nothing
End Function
Run Code Online (Sandbox Code Playgroud)
第二版:
Function DoAnotherThing
Dim Connection, Command, Recordset
Set Connection = Server.CreateObject("ADODB.Connection")
Set Command = Server.CreateObject("ADODB.Command")
Connection.Open "blah blah blah"
Command.ActiveConnection = Connection
Command.CommandText = "blah blah blah"
Set Recordset = Command.Execute
If Recordset.EOF = False Then
While Recordset.EOF = False Then
// Do stuff.
Recordset.MoveNext
WEnd
Else
// Handle error.
End If
Recordset.Close
Connection.Close
Set Recordset = Nothing
Set Command = Nothing
Set Connection = Nothing
End Function
Run Code Online (Sandbox Code Playgroud)
现在,让我们从问题开始:
什么是最好的,
Connection.Open "blah blah blah"
Command.CommandText = "blah blah blah"
Recordset.Open Command, Connection
Run Code Online (Sandbox Code Playgroud)
要么
Connection.Open "blah blah blah"
Command.ActiveConnection = Connection
Command.CommandText = "blah blah blah"
Set Recordset = Command.Execute
Run Code Online (Sandbox Code Playgroud)
?
在做SELECT时我应该使用断开连接的记录集
Set Recordset = Command.Execute
Command.ActiveConnection = Nothing
Connection.Close
Set Connection = Nothing
Run Code Online (Sandbox Code Playgroud)
?
我必须打电话吗?
Recordset.Close
Connection.Close
Run Code Online (Sandbox Code Playgroud)
即使我这样做
Set Recordset = Nothing
Set Command = Nothing
Set Connection = Nothing
Run Code Online (Sandbox Code Playgroud)
正下方(即,垃圾收集器时由被调用Set Stuff= Nothing也.Close它们破坏前)?
我必须包括
Recordset.Close
Connection.Close
Set Recordset = Nothing
Set Command = Nothing
Set Connection = Nothing
Run Code Online (Sandbox Code Playgroud)
即使函数在那里结束,这些对象超出范围,垃圾收集器(应该)照顾它们?
经典ASP是否有汇集连接,所以我可以用每个命令打开和关闭它们,还是应该传递一个公共连接对象?
提前感谢您的帮助,Andrea.
GSe*_*erg 10
都.
这取决于您是否想要所有参数Recordset.Open,以及您的个人喜好.
你可以,但没关系.它几乎没有任何区别 - 你的命令已经完成,并且,虽然打开了连接对象,但是所有的锁和东西都会在服务器上释放.
VBScript中没有垃圾收集器,有引用计数.
当没有对它的引用时,一个对象被销毁,所有的终结器被调用.
在池连接的情况下,这可能会有所不同 - 因为服务器可能保留对连接的引用,将变量设置为Nothing实际可能不会执行任何操作,因为引用计数不会达到零(并且您不必设置它到Nothing反正,它会自动在退出函数来完成).
如果服务器不打算连接池,它可能不会引用它,此时将变量设置为Nothing(显式或隐式)也将关闭连接.
我个人的偏好是打电话Close,以便我知道我的东西在哪里,但不要设置变量Nothing.这对于池化和非池化连接都可以正常工作.
见问题3.
在Web环境中,您总是希望在需要时打开一个新的Connection对象,除非您的多个方法必须在同一事务中执行其位.
| 归档时间: |
|
| 查看次数: |
12548 次 |
| 最近记录: |