IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Gerer les pertes de connection


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 69
    Par défaut Gerer les pertes de connection
    Bonjour tous le monde,

    J'ai fait un programme en c# qui utilise des connection SQL.

    J'aimerai savoir comment vous gérer les pertes de connection.

    Je sais qu'il faut utilisé des try catch.

    Mais par exemple dans une fonction j'utilise un datareader

    Comment savoir si il est rentrer dans le catch s'il a perdu la connection ou bien s'il a eu un problème avec la base de donné au tout autre problème ?

    Cette exemple est valable pour toute les autres chose relier a la connection sql comme les transaction etc.

    Alors comment faite vous pour gèrer les pertes de connection et avertir l'utilisateur si la connection est perdu

    merci beaucoup en esperant avoir été assez claire.

  2. #2
    Membre chevronné Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Par défaut
    Salut,

    ton objet représentant la connexion a une propriété State.

    Aussi, dans le catch l'exception attrapée te fournit des informations sur ce qui s'est passé.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 69
    Par défaut
    merci pour ta réponse,

    j'ai fait quelque teste et la fonction state ne change pas immédiatement après que la connection soit perdu. J'ai fait quelque recherche et on dirai qu'elle change seulement si elle attrape un exception (j'ai pas tester si elle changai vraiment). A moin qu'il y ait une fonction refresh ?

    Donc il semblerai que le state serai plus un indicateur pour savoir si une connection est déja ouverte avant d'en ouvrir une. A moins que je ne me trompe ?

    comme gerer savoir que le message d'exception est celui d'une connection perdu.

    merci

    PS: Je tien a préciser que mon programme est destiné a windows CE 5 et que je suis donc sur le Compact framework 3,5

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Ne pas oublier aussi les event StateChange et InfoMessage sur l'objet SqlConnection, qui permettent d'être averti des modifications d'état ou de remontée d'info depuis le serveur.

    Sauf problème réseau et/ou redémarrage du serveur alors que la connexion est ouverte, on ne "perd" pas une connexion comme cela.

    Si cela arrive c'est visiblement que la durée de vie de tes connexions est trop longue.

    C'est un schéma qui avait sa justification, il y a ... quelques années (+ de 10), mais les connecteurs actuels dispose (tous ?) de pool de connexions qu font qu'on ne voit pas vraiment de nécéssité à laisser une connexion ouverte quand on ne l'utilise pas. Le temps d'aqcuisition sur Sql Server est quasi négligeable.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 69
    Par défaut
    merci bluedeep pour ta réponse,

    Comment marche les event state change sur le sql connection ?

    Pour la connection il y a des risque de perte de connection puisque je suis sur un appareil mobile qui ce promène dans une usine. Il y a donc des chance que la connection puisse être perdu en milieux de traitement par exemple et envois des exception c'est pourquoi j'essai de comprendre comment les gérer.

    merci

  6. #6
    Membre éprouvé Avatar de arthenius
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 107
    Par défaut
    salut

    je tombe un peu par hasard sur ce poste.
    nous avions la meme problematique, a savoir des pockets qui se connecte via le wifi a une bdd sql stockee sur un serveur...

    enfin qd je dis se connecte, nous passons par des webservices, n'ayant pas trouver d'autre méthodes (pas de connection direct ADO depuis pocket vers sql sur le reseau...enfin a ma connaissance...)

    Pour palier a ces pbs de deconnection lie a un wifi defaillant par endroit (stock oblige...), j'ai fait un webservice qui permet de tester (par un simple select) si la connection est valide
    si l'appel a ce webservice plante ==> j'ai une boucle while qui se lance, qui relance le meme webservice en incrementant une variable et tout les 10 essais je demande si on souhaite continuer...tant que ce test n'est pas bon, je ne lance pas les vrais gros traitement d'update ou autre insert de BDD

    c'est le seul moyen a peu pres propre que j'ai trouver, pour palier a notre pb de wifi...
    si cela peux t'aider...

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par arthenius Voir le message
    (pas de connection direct ADO depuis pocket vers sql sur le reseau...enfin a ma connaissance...)
    Et RDO ?

  8. #8
    Membre éprouvé Avatar de arthenius
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 107
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Et RDO ?
    j'avoue ne pas avoir chercher a l'epoque cote ODBC a tord peut etre... ??
    me confirme tu que via ODBC on peux ce connecter directement depuis un pocket sur un serveur SQL sur le reseau ?

  9. #9
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Euh ... je ne confirme (ni n'infirme d'ailleurs) rien de cela; RDO peut se connecter à Sql Server sans passer par ODBC.

    Mais pour ma part, je ne l'utilise pas, j'utilise une base locale SQL Server CE que je synchronise avec les bases SQL Server via réplication de fusion (sur WiFi, 3G, Edge, etc ....).

  10. #10
    Membre éprouvé Avatar de arthenius
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 107
    Par défaut
    nous avions aussi penser a cette solution, mais etant donner qu'il s'agissait d'une gestion de stock nous avons prefere utiliser les webservice pour le caractere instantannee des modifications / et informations recuperer sur la BDD (sans avoir a attendre une synchro de bdd)

    mes excuses marco pour ce petit HS sur ton post

  11. #11
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par arthenius Voir le message
    nous avions aussi penser a cette solution, mais etant donner qu'il s'agissait d'une gestion de stock nous avons prefere utiliser les webservice pour le caractere instantannee des modifications / et informations recuperer sur la BDD (sans avoir a attendre une synchro de bdd)
    Mouais ... pourquoi pas .... sauf que cela suppose que le réseau soit dispo à tout instant, alors que la synchro peut rendre la dispo réseau transparente à l'utilisateur.

  12. #12
    Membre éprouvé Avatar de arthenius
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 107
    Par défaut
    d'ou nos problemes de pertes de connection

  13. #13
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par arthenius Voir le message
    d'ou nos problemes de pertes de connection
    CQFD

    Et cela pour éviter un retard de quelques secondes (temps de synchro)

  14. #14
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 69
    Par défaut
    merci pour vos reponses.

    Pour le connecteur j'utilise simplement System.Data.SqlClient (Aucune idée si cela à un lien avec ado.net)

    salut arthenius, n'ayant j'amait utilisé de webservices je ne comprend pas vraiment ta solution désolé

    Il faut dire aussi que je suis assez débutant dans ce domaine

    Pour l'utilisation de StateChange est-ce que cet evénement regarde justement le state de la connection car comme j'ai dit plus haut selon les test que j'ai fait quand la connection étai perdu le state ne changait que losque j'essayai de faire une requete sql et donc me levait une exception.

    En faite ce que j'aimerai faire c'est que si je suis en plein traitement et que je perd la connection qu'un message exemple conneciton perdu s'affiche et arrete le traitement. Par exemple si on est dans une fonction qui utilise sql si la connection est perdu on revien en arrière (comme si la fonction n'aurai jamais été exécuté).

    J'aimerai aussi que si la connection est perdu et que l'utilisateur cliquer par exemple sur un bouton qui a besoin de la connection pour marcher qu'il y ai un message qui est écrit vous n'ête plus connecter.

    merci beaucoup, je sais que je ne suis peut-être pas très claire, mais je fait de mon mieu pour expliquer ma problématique.

  15. #15
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Ta demande est claire mais je maintiens que ton choix architectural est "perfectible".

    En environnement à connectivité réduite, le plus simple est d'alimenter une base locale et de la syncrhoniser (le mécanisme de déclenchement de la synchro pouvant être bien sur débattu : tentative à chaque modif, à intervalle régulier, en auditant la qualité du réseau, ou encore un mix des trois).

  16. #16
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 69
    Par défaut
    Le problème est qu' on m'oblige a me connecter a la base de donné directemen donc pas de base de donné locale.

    J'ai fait un choix au départ du programme de démarer la connection sql directement au début du programme quand l'utilisateur se "log". Il aurai peut-être été judicieu de faire ma connection a chaque accès a la base de donné plutots, mais je ne connais pas les différence en performence.

    Pour ce qui est de ma problématique pour l'instant je n'ai pas trouver autre chose que de faire des try catch et s'il y a une exception de dire que la connection a été perdu ( même si ce n'est pas génial comme truc).

    Dans le cas d'un programme sur windows par exemple. Qu'elle est la technique utilisé pour vérifier qu'on est toujour connecter au serveur avant d'effectuer quoi que ce soit ? Et qu'est ce que vous faite pour prévenir(et avertir l'utilisateur si besoin) les éventuel déconnection lors de traitement avec la base de donné ? (Même si les déconnection son rare sur PC)

    Désoler pour toute c'est question, mais je n'arrive vraiment pas a trouver la méthode pour gérer cela.

  17. #17
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par marcolo21 Voir le message
    J'ai fait un choix au départ du programme de démarer la connection sql directement au début du programme quand l'utilisateur se "log". Il aurai peut-être été judicieu de faire ma connection a chaque accès a la base de donné plutots, mais je ne connais pas les différence en performence.
    C'est déjà la première chose à faire.

    Dans le cas d'un programme sur windows par exemple. Qu'elle est la technique utilisé pour vérifier qu'on est toujour connecter au serveur avant d'effectuer quoi que ce soit ? Et qu'est ce que vous faite pour prévenir(et avertir l'utilisateur si besoin) les éventuel déconnection lors de traitement avec la base de donné ? (Même si les déconnection son rare sur PC)
    Pas la moindre idée, car, encore une fois, en connectivité limité, je ne ferais en aucun cas ce choix achitectural.

  18. #18
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 69
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    C'est déjà la première chose à faire.
    Donc il est préférable d'ouvrir et de fermer nos connection à chaque fois ?

    Ce n'est pas trop couteu en performance ?

    Citation Envoyé par Bluedeep Voir le message
    Pas la moindre idée, car, encore une fois, en connectivité limité, je ne ferais en aucun cas ce choix achitectural.
    Et quel est le bon choix architectural a utilisé dans ce cas selon toi ?



    Même en connection "ilimiter", c'est a dire un pc toujours connecté à internet il peut arriver qu'il y ai des déconnections en plein traitement. Il faut gérer ces cas et envoyer un message à l'utilisateur pour l'avertir, non ?

    Dans le cas d'un programme sur windows par exemple. Qu'elle est la technique utilisé pour vérifier qu'on est toujour connecter au serveur avant d'effectuer quoi que ce soit ? Et qu'est ce que vous faite pour prévenir(et avertir l'utilisateur si besoin) les éventuel déconnection lors de traitement avec la base de donné ? (Même si les déconnection son rare sur PC)
    si quelqu'un a une idée pour cette question n'aillé pas de gène, j'aimerai bien connaitre la solution

  19. #19
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par marcolo21 Voir le message
    Donc il est préférable d'ouvrir et de fermer nos connection à chaque fois ?

    Ce n'est pas trop couteu en performance ?
    Faut lire les réponses ....

    Regarde le message #4 de la discussion.


    Et quel est le bon choix architectural a utilisé dans ce cas selon toi ?
    Même réponse : trois messages plus haut; base embarqué + synchro.
    Ou alors, embarqué puis web service de mise à joru avec gestion locale de file (mais inutilement compliqué à mon avis).

    Même en connection "ilimiter", c'est a dire un pc toujours connecté à internet il peut arriver qu'il y ai des déconnections en plein traitement. Il faut gérer ces cas et envoyer un message à l'utilisateur pour l'avertir, non ?
    Les connexions ne se perdent pas comme cela; et a priori, si tu respectes un cycle de vie cours de connexions, je ne vois pas le problème (bien sur, un try/catch pour afficher un message d'erreur éventuel).

    Mais, a priori, tes traitements n'ont pas à être locaux mais coté serveur, donc, idem si tu as besoin d'une connexion longue (sauf cas particulier), c'est un problème d'archi applicative à la base.

  20. #20
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 69
    Par défaut
    Faut lire les réponses ....

    Regarde le message #4 de la discussion.
    Désolé sa faisai un bout de temps qu'elle avait été posté et je ne m'en souvenai plus.

    Même réponse : trois messages plus haut; base embarqué + synchro.
    Ou alors, embarqué puis web service de mise à joru avec gestion locale de file (mais inutilement compliqué à mon avis).
    pour la base embarqué tu vx dire intégré une mini base de donné dirrectement dans le programme ? Si c'est cela comment je fait pour avoir les donné que je récupère par des select sur mon serveur tous au long de mon programme ? Je vais devoir les récupérer sur mon serveur et donc sa revien a faire affaire directement avec le serveur non ?

Discussions similaires

  1. Gérer les events d'un tableau de boutons
    Par lord_kalipsy dans le forum wxWidgets
    Réponses: 7
    Dernier message: 20/10/2004, 10h13
  2. gerer les parametres entrée sur un TADOStoredProc
    Par keguira dans le forum Bases de données
    Réponses: 1
    Dernier message: 13/09/2004, 15h56
  3. [Htaccess] Gérer les erreurs HTTP du type 404...
    Par Marshall_Mathers dans le forum Apache
    Réponses: 4
    Dernier message: 01/07/2004, 10h29
  4. [interbase] gerer les transactions
    Par webbulls dans le forum Bases de données
    Réponses: 3
    Dernier message: 14/05/2004, 18h27
  5. [syntaxe] Gerer les variables dans une requete
    Par rastapopulos dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 15/04/2003, 12h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo