Laisser une connexion ouverte [Résolu]

Moundir76 286 Messages postés dimanche 3 octobre 2010Date d'inscription 16 mai 2014 Dernière intervention - 30 juil. 2013 à 09:55 - Dernière réponse : Moundir76 286 Messages postés dimanche 3 octobre 2010Date d'inscription 16 mai 2014 Dernière intervention
- 31 juil. 2013 à 10:21
Bonjour,

J'ai un programme qui peut executer une tonne de requêtes, comme presque pas. Je ne suis pas DBA, et j'aimerais, dans mon programme, faire en sorte que l'application se connecte a la base lorsqu'on la démarre, puis qu'un timeout passe à 60 secondes, et si une requête (n'importe ou dans le programme) utilise la connexion, alors cela relance le timeout à 60 sec.

Y a t-il une astuce pour faire cela ?

Cordialement
--
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
NHenry 14261 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 21 septembre 2018 Dernière intervention - 30 juil. 2013 à 19:37
1
Merci
Bonsoir,

Ok, j'attendais un peu de code ou une idée sur l'organisation du programme

Sinon, fais un module dans le quel tu stocke la variable de la connexion en public.
Dedans, tu fais une fonction de connexion et une autre de déconnexion.
La première appelée lors du lancement du programme et l'autre lors de la fermeture de l'application.

Ensuite, tu utilise uniquement la variable créée.

Merci NHenry 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de NHenry
Meilleure réponse
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscriptionModérateurStatut 28 août 2015 Dernière intervention - 31 juil. 2013 à 09:48
1
Merci
Salut

-1- Place une variable dteLastUsed de type Date dans la Form. Cette variable te servira a stocker la date et heure de la dernière utilisation de ta DB.
Dans chaque requète que tu soumets, renseigne cette variable en y mettant DateTime.Now

-2- Place un nouveau Timer sur ta Form, Enabled et Interval 1000 ou 2000 (on n'est pas pressé)
Dedans, évalue le temps écoulé depuis ta dernière requète en calculant un TimeSpan et déconnecte toi si ... :
Dim UnUsed As System.TimeSpan = DateTime.Now.Subtract(dteLastUsed)
If UnUsed.TotalSeconds > 60 Then Call maDbDisconnect


-3- Bien sûr, avant chaque requète, il te faudra vérifier si ta connexion est active, auquel cas une reconnexion sera nécessaire
If maConnexion Is Nothing Then Call maDbConnect

Merci cs_Jack 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Moundir76 286 Messages postés dimanche 3 octobre 2010Date d'inscription 16 mai 2014 Dernière intervention - 31 juil. 2013 à 09:55
Salut,

Merci beaucoup pour ta solution !
Je pense que nos messages se sont croisés, est ce qu'il y a une solution qui est "mieux" que l'autre ?
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscriptionModérateurStatut 28 août 2015 Dernière intervention - 31 juil. 2013 à 10:02
Dans ton code, Moundir76, le Timer commence lors de la connexion.
Le mien commence après la dernière utilisation d'une requète.
A toi de voir laquelle est la plus adaptée à ton besoin ...

Le risque de ta solution est que ta connexion peut se fermer juste avant ou pendant une requète ...
Moundir76 286 Messages postés dimanche 3 octobre 2010Date d'inscription 16 mai 2014 Dernière intervention - 31 juil. 2013 à 10:21
En effet, je n'avais pas pensé à cette notion de connexion qui peut se refermer pendant un traitement. Théoriquement ce sera impossible car devant chaque requete je fais appel a ma procedure Connect, et cela relance pour trois minutes le compteur.

Voila le code final :

 Sub Connect()
        If MaConnexion.State = ConnectionState.Open Then
        Else
            MaConnexion.Open()
        End If

        'Set interval à 3 minutes
        tmr.Interval = TimeSpan.FromMinutes(3).TotalMilliseconds
        tmr.Start()
    End Sub


Encore merci !
Commenter la réponse de cs_Jack
NHenry 14261 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 21 septembre 2018 Dernière intervention - 30 juil. 2013 à 12:49
0
Merci
Bonjour,

Comment tu fais actuellement ?
As-tu essayer d'utiliser une autre postée pour ta connexion (Module au lieu de fonction par exemple) ?
Commenter la réponse de NHenry
Moundir76 286 Messages postés dimanche 3 octobre 2010Date d'inscription 16 mai 2014 Dernière intervention - 30 juil. 2013 à 13:03
0
Merci
Bonjour,

Actuellement, dès que j'ai besoin de ma connexion, je l'ouvre au dernier moment, et je la referme au plus tôt. Cependant, dans mon application, j'ai une fonction de recherche et le temps que la connexion se fasse, cela provoque un léger "freeze" de l'application.

Ainsi je souhaiterais que ma connexion se ferme toute seule si elle n'est plus utilisée au bout d'une minute, car je ne pense pas que ce soit très propre de la laisser ouverte en permanence ?

Ai-je été plus clair ?

Merci d'avance
Commenter la réponse de Moundir76
Moundir76 286 Messages postés dimanche 3 octobre 2010Date d'inscription 16 mai 2014 Dernière intervention - 31 juil. 2013 à 09:41
0
Merci
Bonjour,

Merci beaucoup, c'est une idée à laquelle je n'avais pas pensée ! Les développeurs VB ont ils souvent recours au module ?

Voici mon code pour ceux que ça pourrais intéresser :

Imports System.Data.SqlClient

Module moduleConnexion
    WithEvents tmr As New Timer
    Dim MaConnexion As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=""Path\de\la BDD\bdd.mdf"";Integrated Security=True;Connect Timeout=30;User Instance=True")
    'Ouvre la connexion et 
    Sub Connect()

        MaConnexion.Open()
        'Set interval à 3 minutes
        tmr.Interval = TimeSpan.FromMinutes(3).TotalMilliseconds
        tmr.Start()
    End Sub

    'Si le timer est a 0 on ferme la connexion
    Private Sub tmr_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles tmr.Elapsed
        MaConnexion.Close()
    End Sub


End Module


A+
Commenter la réponse de Moundir76

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.