- · Niveau : INTERMÉDIAIRE
- · Compatibilité : Windows NT/2000 IIS3
Il est impératif de ne jamais oublier de fermer la connexion et le jeu d’enregistrement (recordset) d’une base de données. L’accumulation peut surcharger la mémoire pour rien.
oRs.close set oRs = nothing oConn.close set oConn = nothing
Objet ADO
' Création de l’objet ADO Set oConn = Server.CreateObject("ADODB.Recordset") ' Ouverture de la connexion oConn.Open "[chaine de connexion]" [code] ' Fermer l’objet oConn.Close ' Et vider l’allocation « oConn » de la mémoire Set oConn = Nothing
Avec un « recordset » :
Dim oConn, oRS, sSQL Set oConn = Server.CreateObject("ADODB.Connection") oConn.Open "[chaine de connexion]" ' Création de l’objet RecordSet Set oRS = Server.CreateObject("ADODB.RecordSet") ' Ouverture du RecordSet sSQL = [...] oRS.Open sSQL,oConn [...traitement] ' Fermer l’objet « oRS » oRS.close ' Vider l’allocation « oRS » de la mémoire set oRS = nothing oConn.close set oConn = nothing
Notez que vous pouvez ouvrir une seule connexion au début du script et la fermer seulement a la fin du traitement. En utilisant plusieurs jeux d’enregistrement (recordset). Mais cette pratique n’est pas conseillée, d’abord par les tests au siècle dernier de feu « learnasp.com » et ensuite selon les nouvelles directives mêmes de Microsoft. Même si vous devez rouvrir 20 fois la même connexion dans une même page. Ce sera toujours plus optimisé qu’une seule connexion gourmande. Personnellement j’ouvre le plus tard possible et je ferme le plus tôt possible à moins d’avoir deux requêtes plus ou moins simples de suites. Par exemple deux compteurs (count(*)) ou deux « delete » de suite :
''''' Exemple déconseillé par Microsoft. dim oConn, oRs ' Ouverture de la connexion set oConn=Server.CreateObject("ADODB.Connection") oConn.open "[chaine de connexion]" ' Premier jeu d'enregistrement set oRs = Server.CreateObject("ADODB.recordset") oRs.Open "[sql1]",oConn [traitement 1] ' Fermer le premier jeu d'enregistrement (optionnel) oRs.Close ' Deuxième jeu d'enregistrement set oRs = Server.CreateObject("ADODB.recordset") oRs.Open "[sql2]",oConn [traitement 2] oRs.Close Set oRs = Nothing oConn.Close Set oConn = Nothing
À ne pas faire
À la limite on peut stocker la chaine de connexion dans une variable session, mais il faut à tout prix éviter de créer une connexion dans une variable session! En plus de « by passer » la connexion MTX (Microsoft Transaction Server) et le pool, si l’objet n’est pas fermé convenablement, on garde inutilement la connexion et l’allocation en mémoire le temps de la session, c’est-à-dire 20 minutes.
Ne jamais passer de paramètres à l’objet « Command » dans l’instruction d’exécution.
Toujours initialiser l’objet avec la méthode « Server.CreateObject ». Le serveur indiquera au MTS de créer l’objet dans un paquet de transactions de sorte que les ressources sont mises en commun (pooled).
Ne jamais réutiliser un jeu d’enregistrement (recordset) ou une variable « Command ». Il faut toujours créer une nouvelle instance. Pour plus d’information lire Microsoft - PRB: Problems Reusing ADO Command Object on Multiple Recordsets.