Ne la définition d'un ADO de Commande du ActiveConnection = Rien de fermer le sous-jacent de Connexion SQL?
J'ai un client qui est Classique ASP application est de générer ASP_0147 erreurs. La première chose que je vérifie est qu'ils sont de clôture et de libérer SQL/ADO ressources timeously.
Leur code a le schéma suivant:
Function GetXXXXRecordSet()
Set objConn = Server.CreateObject("ADODB.Connection")
With objConn
.CursorLocation = 3 ''adUseServer (default)
.ConnectionString = strConnectionString
.Open
End With
Set objCmd = Server.CreateObject("ADODB.Command")
Set objCmd.ActiveConnection = objConn
'' Build command object to call SQL stored proc, snipped for brevity
Set objRs = Server.CreateObject("ADODB.RecordSet")
objRs.Open objCmd, ,3,4 '' Cursor=adOpenStatic, Locktype=adLockBatchOptimistic
'' Return Recordset
Set GetXXXXRecordSet = objRs
If Not objCmd Is Nothing Then
objCmd.ActiveConnection = Nothing '' Should this use a Set statement?
Set objCmd = Nothing
End If
If Not ObjRs Is Nothing The Set objRs = Nothing
End Function
Ne la définition d'un ADO de Commande du ActiveConnection = Rien de fermer le sous-jacent de Connexion SQL ou est-ce que doivent être fermés de façon explicite?
Devraient également la ligne:
objCmd.ActiveConnection = Nothing
:
Set objCmd.ActiveConnection = Nothing
Bizarrement la première version ne génère pas une erreur, qui est pourquoi je vous demande.
Il a été si longtemps depuis que j'ai regardé ADO et mes connaissances sont un peu rouillé.
Devrait être: Set objCmd.ActiveConnection = Rien en effet
Je suis curieux ne l'ajout d'une connexion .Proche le code ci-dessus résoudre le problème?
Je l'ai transmis les recommandations pour le client, maintenant juste attendre et voir.
Je suis curieux ne l'ajout d'une connexion .Proche le code ci-dessus résoudre le problème?
Je l'ai transmis les recommandations pour le client, maintenant juste attendre et voir.
OriginalL'auteur Kev | 2010-03-03
Vous devez vous connecter pour publier un commentaire.
Ma compréhension a toujours été que la mise
ActiveConnection
àNothing
n'a pas de fermer la connexion, il vient de retirer de l'objet, c'est utile pour des choses comme les jeux d'enregistrements où vous voulez un fixe instantané en lecture seule du jeu d'enregistrements (combinés avec les paramètres corrects options de curseur) et donc n'ont pas besoin de garder le lien direct pour ce Jeu (mais peut-être besoin de la connexion toujours ouverte pour d'autres opérations)Autant que je sache seulement fait appel
objConn.Close
ferme la connexion etSet objConn = Nothing
libère de la mémoireRe-lire la MSDN docs et les expressions qu'ils utilisent est: "...dissocie l'objet de Commande de la Connexion en cours".
OriginalL'auteur RobV
La fermeture d'un ADODB RS + CONN:
Devrait donc être: Set objCmd.ActiveConnection = Rien en effet
GL!
source:
http://www.aspwebpro.com/tutorials/asp/dbconnectionclose.asp
OriginalL'auteur Younes
Été un certain temps pour tout cela, mais ne serait pas un réglage à rien de juste, clair de l'objet. Je parie que si vous surveiller SQL Server, la connexion n'est pas résilié.
OriginalL'auteur Jonathan Kaufman
VBScript est le garbage collector, et fournit même très claire et explicite des garanties quant à la table de chronométrage. Définition d'une variable locale à rien juste avant qu'il passe hors de la portée est complètement redondant parce que la fin de la fonction sera de faire la même chose, et le GC nettoyer l'objet.
La seule question est de savoir si le ADODB.Connexion du destructeur libère les ressources de base de données. Je suis certain à 99% qu'il n'. Si si, il suffit de laisser la Connexion de l'objet hors de portée permettra de libérer toutes les ressources associées.
OriginalL'auteur Thom Smith
Oui, vous avez raison, que la création d'un objet à rien libère de la mémoire en utilisant la fonction "Set"...
Espère que cette aide.
Oui, il est nettoyé trop...depuis que vous êtes à la libération de la mémoire occupée par le " objCmd.ActiveConnection", il serait également prudent de 'Set objCmd = Nothing' aussi!
Non, ce n'est pas le cas, le réglage de ActiveConnection rien n'efface les objets de référence à l'objet de Connexion, il n'est pas évident de l'objet réel
OriginalL'auteur t0mm13b