Accueil > Forum > > > > Destruction des objets de récupération de données
Destruction des objets de récupération de données
lundi 15 octobre 2007 à 17:13:33 |
Destruction des objets de récupération de données

aloisio11
|
Bonjour, J'utilise un module pour mon site Web pour tout ce qui est récupération de données. Voici le code : Option StrictOnImports System.Data.SqlClientPublic Module SQLDataAccessPublicFunction GetReader(ByVal pRequeteSQL AsString) As SqlDataReaderDim vCommande AsNew SqlCommand(GetChaineSQL(pRequeteSQL), DirectCast(HttpContext.Current.Session("CONNECTION"), SqlConnection))Return vCommande.ExecuteReader()EndFunctionPublicFunction GetTable(ByVal pRequeteSQL AsString) As Data.DataTableDim vDataTable AsNew Data.DataTable("TABLE")Dim vDataAdapter As SqlDataAdaptervDataAdapter = New SqlDataAdapter(GetChaineSQL(pRequeteSQL), DirectCast(HttpContext.Current.Session("CONNECTION"), SqlConnection))vDataAdapter.Fill(vDataTable) Return vDataTableEndFunctionPublicFunction GetScalar(ByVal pRequeteSQL AsString) AsIntegerDim vCmd AsNew SqlCommand(pRequeteSQL, DirectCast(HttpContext.Current.Session("CONNECTION"), SqlConnection))Dim vRes AsIntegervRes = CInt(vCmd.ExecuteScalar())vCmd.Dispose() vCmd = NothingReturn vResEndFunctionEnd Module
Pour le GetReader et le GetTable, dois-je fermer et détruire les objets que j'utilise comme dans GetScalar. Si oui comment dois-je faire ?
Est ce que je fais des erreurs en faisant ainsi ?
Merci pour votre aide 
|
|
lundi 15 octobre 2007 à 17:37:19 |
Re : Destruction des objets de récupération de données

jesusonline
|
Bonjour,
le vCmd = nothing ne sert à rien, en faisant un dispose le garbage sait que l'objet ne sert plus à rien et qu'il peut le nettoyer quand il en aura envie.
Sinon, oui il faut toujours faire un dispose sur le datreader et la connection c'est meme ce qui permet de lacher la connexion à sql ...
Comme tu retournes ton sqldatreader il faut faire le dispose dans la méthode appellante (le dispose fait automatiquement le close)
Je te conseille d'utiliser le mot clé using
using reader as sqldatareader = getReader()
end using
ca fera le dispose et donc le close automatiquement.
Par contre ce qui est mal c'est de mettre la connexion en session !!! :-| je suis de l'avis de mettre une requete=une connexion. On peut ouvrir seulement 20 connexions simultannées (il me semble valeur par défaut). Si tu as plus de 20 utilisateurs alors t'es cuit :p
Bref créer une connexion par requete, la création d'une connexion n'est pas si couteuse que ca, puisque ADO.net gère déjà un pool de 20 connexions ...
En faisant ca, il faudra impérativement fermer la connexion après utilisation. Dans le cas de la méthode GetReader il faudra rajouter un paramètre dans command.ExecuteReader(xxxx) pour lui dire de fermer automatiquement la connexion lorsque l'on ferme le reader.
Cyril - MSP - MCPD ASP.net & MCTS SQL - Consultant indépendant
|
|
mardi 16 octobre 2007 à 08:54:16 |
Re : Destruction des objets de récupération de données

aloisio11
|
Merci pour ta réponse. Voila la nouvelle version de mon module : Option StrictOnImports System.Data.SqlClientPublic Module SQLDataAccess Public vConnection As SqlConnection PublicFunction GetReader(ByVal pRequeteSQL AsString) As SqlDataReader Dim vCommande AsNew SqlCommand(GetChaineSQL(pRequeteSQL), vConnection) Dim vDr As SqlDataReader vDr = vCommande.ExecuteReader() vCommande.Dispose() Return vDr EndFunction PublicFunction GetTable(ByVal pRequeteSQL AsString) As Data.DataTable Dim vDataTable AsNew Data.DataTable("TABLE") Dim vDataAdapter As SqlDataAdapter vDataAdapter = New SqlDataAdapter(GetChaineSQL(pRequeteSQL), vConnection) vDataAdapter.Fill(vDataTable) vDataAdapter.Dispose() vDataAdapter = Nothing Return vDataTable EndFunction PublicFunction GetScalar(ByVal pRequeteSQL AsString) AsInteger Dim vCmd AsNew SqlCommand(pRequeteSQL, vConnection) Dim vRes AsInteger vRes = CInt(vCmd.ExecuteScalar()) vCmd.Dispose() Return vRes EndFunctionEnd Module
Toutes mes pages hérite de la classe BasePage dans laquelle j'ouvre la connection au Init et la ferme au Unload
Option StrictOnImports System.Data.SqlClientPublic Class BasePage Inherits System.Web.UI.Page PublicSubNew() EndSub PrivateSub Page_Init(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMe.Init vConnection = New SqlConnection(ConfigurationManager.ConnectionStrings(ConfigurationManager.AppSettings("SITE") & "_" & ConfigurationManager.AppSettings("DECKPOINT")).ToString()) vConnection.Open() EndSub PrivateSub Page_Unload(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMe.Unload vConnection.Close() vConnection.Dispose() vConnection = Nothing EndSub ProtectedOverloadsOverridesSub OnError(ByVal e As EventArgs) Session( "ERREUR") = Server.GetLastError() Response.Redirect("pErreur.aspx") EndSub
End Class
Quand j'appelle getReader je le fais ainsi :
Dim vDrArt As Data.SqlClient.SqlDataReader
vDrArt = GetReader(vSQL) If vDrArt.Read() Then '..... EndIfvDrArt.Close()
vDrArt = Nothing
Dois-je faire un vDrArt.Dispose() ?
Le reste est il correcte ?
Merci d'avance pour votre aide qui m'est plus qu'efficace ?
|
|
mardi 16 octobre 2007 à 09:53:00 |
Re : Destruction des objets de récupération de données

jesusonline
|
Réponse acceptée !
Non, le module, contient des méthodes static qui sont global à l'application. En ouvrant la connection dans le init de la page et en le fermant dans le unload, tu vas d'abord laisser la connexion trop longtemps ouvert (le unload se fait tard) et surtout si tu as 2 requêtes simultannées alors tu as un sacré bordel en perspective :p Si tu veux faire de la sorte, il ne faut pas passer par une variable static (module) mais mettre la connexion accessible seulement pour la page via Page.Items["conn"] = conn; Sinon, utilise les using. using reader as SqlDataReader = GetReader() while reader.read end while end using le using fait automatiquement un dispose qui lui même fera le close. Il est aussi inutile de faire =nothing. La solution d'ouvrir et fermer une connexion par page peut paraitre séduisante MAIS ca suffira seulement pour des petits sites, car tupourras pas avoir beaucoup de requête simultannées. Cyril - MSP - MCPD ASP.net & MCTS SQL - Consultant indépendant
|
|
mardi 16 octobre 2007 à 10:04:48 |
Re : Destruction des objets de récupération de données

aloisio11
|
Merci.
A part le Unload je peux fermer dans quel événement ?
Quand j'ai des requêtes qui se croisent j'utilise une Datatable et un DataReader.
Pour la connexion par page elle est préférable car sur une page je peux me retrouver avec 200 voir 300 requêtes, ce qui serait beaucoup trop lourd s'il y avait 200-300 connexions, ouvertures, fermetures.
Avant je faisais cela et je trouve qu'avec une connexion par page les perf sont meilleurs.
|
|
mardi 16 octobre 2007 à 10:07:06 |
Re : Destruction des objets de récupération de données

jesusonline
|
2 ou 300 requête par page :| dans ce cas là ... mais je pense que tu dois pouvoir regrouper tes requêtes et tes connexions.... Tu peux faire le dispose après le render overrides sub Render(..) mybase.Render(...) close(); end sub Cyril - MSP - MCPD ASP.net & MCTS SQL - Consultant indépendant
|
|
mardi 16 octobre 2007 à 11:15:44 |
Re : Destruction des objets de récupération de données

aloisio11
|
Merci pour ton aide, je vais essayer de me débrouiller avec ces conseils.
|
|
Cette discussion est classée dans : données, récupération, objets, vcmd, prequetesql
Répondre à ce message
Sujets en rapport avec ce message
Récupération de données d'un champ de Formulaire [ par NEVADA91 ]
Bonjour à tous,Quelqu'un pourrait-il m'aider, et me dire comment faire pour récupérer le montant d'un achat figurant sur mon formulaire, pour que celu
Récupération d'objet Javascript [ par Ekik ]
Bonjour,Est-il possible de récupérer en ASP des objets javascript comme des tableaux, des objets,... qui proviennent d'une page quelquonque, Merci!Céd
Récupération de données d'u formulair !! :( [ par pi0up51 ]
C terrible pcqe je coince encore sur une mrd !! :(J'ai un formulaire avec des bouton ration (les ptt carré à cocher !! :) et pis ben je sais pas comme
récupération données effacées sur disq dur [ par sylvain ]
Y a-t'il un utilitaire pas trop cher me permettant de récupérer des données effacées sur disque dur, merci de votre aide
récupération de données et affichage dans un label [ par julien67 ]
salut à tous !J'aurais aimé savoir quelle était la meilleure méthode pour afficher le résultat d'une requête dans un Label de WebForm par exemple...J'
Problème de récupération de données avec formulaire [ par jfmahe ]
Quand je transmets les données d'un formulaire à une autre page. formulaire.asp<input type="subm
Récupération données XML en ASP [ par lmoktar ]
Bonjour, c'est en cherchant un script proche que j'ai décidé de soumettre ma question.Mon appli : J'envoi par le biai d'une iframe une commande de sup
Problème de fusion des objets de données [ par ufyte ]
Bonjour, Je développe une application web avec Visual Studio 2005. J'ai une base Access avec plusieurs tables. j'ai créé une requête Union "GetTyp
ASP.Net : comment récupérer les objets Application et Session [ par drouhne ]
Je stocke quelques données issues d'une base de données dans l'objet Application et l'objet Session afin d'optimiser les performances. J'ai également
Problème de récupération de données [ par nokali ]
Bonjour tout le monde!!!Voila je suis en stage en entreprise en ce moment et je dois programmer en ASP et en Visual Basic.Le problème c'est que je ne
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|