begin process at 2012 05 27 19:22:14
  Trouver un code source :
 
dans
 
Accueil > Forum > 

ASP.NET

 > 

Scripting

 > 

VBScript

 > 

Destruction des objets de récupération de données


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

StrictOn

Imports

System.Data.SqlClient

Public

Module SQLDataAccess

PublicFunction GetReader(ByVal pRequeteSQL AsString) As SqlDataReader

Dim vCommande AsNew SqlCommand(GetChaineSQL(pRequeteSQL), DirectCast(HttpContext.Current.Session("CONNECTION"), SqlConnection))

Return vCommande.ExecuteReader()

EndFunction

PublicFunction GetTable(ByVal pRequeteSQL AsString) As Data.DataTable

Dim vDataTable AsNew Data.DataTable("TABLE")

Dim vDataAdapter As SqlDataAdapter

vDataAdapter =

New SqlDataAdapter(GetChaineSQL(pRequeteSQL), DirectCast(HttpContext.Current.Session("CONNECTION"), SqlConnection))

vDataAdapter.Fill(vDataTable)

Return vDataTable

EndFunction

PublicFunction GetScalar(ByVal pRequeteSQL AsString) AsInteger

Dim vCmd AsNew SqlCommand(pRequeteSQL, DirectCast(HttpContext.Current.Session("CONNECTION"), SqlConnection))

Dim vRes AsInteger

vRes =

CInt(vCmd.ExecuteScalar())

vCmd.Dispose()

vCmd =

Nothing

Return vRes

EndFunction

End

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

Membre Club Administrateur CodeS-SourceS

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

StrictOn

Imports

System.Data.SqlClient

Public

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

  EndFunction

End

Module


Toutes mes pages hérite de la classe BasePage dans laquelle j'ouvre la connection au Init et la ferme au Unload

Option

StrictOn

Imports

System.Data.SqlClient

Public

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
   '.....
EndIf

vDrArt.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

Membre Club Administrateur CodeS-SourceS
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

Membre Club Administrateur CodeS-SourceS
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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,406 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales