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

Windows Forms Discussion :

[vb.net][connection] laisser la connection ouverte


Sujet :

Windows Forms

  1. #1
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut [vb.net][connection] laisser la connection ouverte
    Bonjour,
    J'ouvre et ferme la connection a chaque fois que j'interroge la base. J'ai remarque que cela ralenti mon application. Est il préférable de laisser la connection ouverte tout le temps que l'application est utilisée et de la fermer seulement lorsque l'application est fermée ?

    Que me conseillez vous ?

    merci

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    un Dataset en cache de ta bd (une connection et terminé )

  3. #3
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut
    qu'est ce que tu veux dire par un dataset en cache de ma base de données ??

    voici ma fonction qui appelle la procédure stockée donnée en parametre. Si je n'appelle pas cette fonction mon programme est bien plus rapide. J'ai mis la connection globale, donc je ne l'ouvre qu'une fois et pourtant c'est toujours aussi lent. La procédure stockée, elle, est tres rapide lorsqu'elle est executée sous SQLQueryAnalyser (j'ai testé au profiler).
    Donc ca vient de mon code mais je vois pas ou:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Public Function GetDataString(ByVal SQL As String, ByVal BlankRow As Boolean, Optional ByVal Type As SQLType = SQLType.StoredProcedure) As String()
     
                Dim returnData() As String
                Dim count As Integer = 0
     
                With m_cmd
                    .CommandText = SQL
                    .Connection = m_con
                End With
     
                m_cmd.CommandType = GetSQLType(Type)
     
                Dim myReader As SqlDataReader = m_cmd.ExecuteReader()
     
                If myReader.HasRows Then
     
                    If BlankRow Then
                        ReDim Preserve returnData(count)
                        returnData(count) = ""
                        count += 1
                    End If
     
                    Do While myReader.Read()
                        ReDim Preserve returnData(count)
     
                        returnData(count) = myReader.GetValue(0).ToString
                        count += 1
                    Loop
                End If
     
                myReader.Close()
     
                Return returnData
     
            End Function

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Essayes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    Public Function GetDataString(ByVal SQL As String, ByVal BlankRow As Boolean, Optional ByVal Type As SQLType = SQLType.StoredProcedure) As String()
     
      Dim count As Integer = 0
      Dim myReader As SqlDataReader
      Dim returnData() As String
     
      With m_cmd
        .CommandText = SQL
        .Connection = m_con
      End With
      m_cmd.CommandType = GetSQLType(Type)
     
      MyReader = m_cmd.ExecuteReader()
      With MyReader
        If .HasRows Then
          While .Read() : count += 1
          End While
        End If
        .Close()
      End With
      returnData = New String(count-1){}
     
      myReader  = m_cmd.ExecuteReader()
      With MyReader
        If .HasRows Then
          Dim i As Integer = 0
          While .Read()
              returnData(i) = .GetValue(0).ToString
              i += 1
          End While
        End If
        .Close()
      End With
     
      Return returnData
    End Function

  5. #5
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut Re: [vb.net][connection] laisser la connection ouverte
    Citation Envoyé par graphicsxp
    Est il préférable de laisser la connection ouverte tout le temps que l'application est utilisée et de la fermer seulement lorsque l'application est fermée ?
    Non, il ne faut pas garder la connexion ouverte: il faut l'ouvrir le plus tard possible, et la fermer le plus tôt possible.

  6. #6
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut
    Certes. Mais pourquoi ?

    Sinon le probleme venait de SQL Server visiblement car en essayant a une heure différente, c'est bcp plus rapide...

  7. #7
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par graphicsxp
    Certes. Mais pourquoi ?
    La bonne question a se poser et pourquoi garder une connection ouverte quand ce n'est pas necessaire :

  8. #8
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut
    parceque je pensais que c'était le fait d'ouvrir la connexion qui prennait du temps. Mais j'étais dans l'erreur.

  9. #9
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    ok
    d'ailleurs pour en revenir à ma toute première remarque le fait de charger les données de ta base de donnée dans un DataSet fortement typé par exemple te permettra aussi d'economiser le nombre de connections puisqu'ainsi l'appli possède déjà les données en cache (accessible immediatement par le DataSet) seule la mise à jour des données nécessitera une autre connection

  10. #10
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut
    Oui mais je ne vais quand meme pas stocker toute ma base dans un dataset! c'est ca que tu veux dire?

  11. #11
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Il faudrait que tu regardes du côté du tuto ADO.Net pour voir s'il y a des references concernant les limites de performances concernant un dataset et la taille des données. Peut-être que quelqu'un sur le forum connait mieux ces aspects d'optimisation/limites

  12. #12
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut
    Mais la je me pose une question: si quelqu'un modifie la base pdt que j'utilise mon application, alors dans ce cas mon dataset ne contient plus les bonnes données

  13. #13
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par graphicsxp
    Mais la je me pose une question: si quelqu'un modifie la base pdt que j'utilise mon application, alors dans ce cas mon dataset ne contient plus les bonnes données
    Tu as été lire la maous tuto :

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ADO.NET : pb DataReader et Connection
    Par raoulv dans le forum Accès aux données
    Réponses: 2
    Dernier message: 02/11/2006, 09h12
  2. [VB.Net/SqlServer] Comment se connecter ?
    Par Pedro Varela dans le forum Accès aux données
    Réponses: 6
    Dernier message: 25/08/2006, 15h48
  3. [VB.Net/Access] Pourquoi une connection multiple pose souci ?
    Par cbleas dans le forum Accès aux données
    Réponses: 2
    Dernier message: 10/08/2006, 16h57
  4. Réponses: 1
    Dernier message: 02/06/2006, 10h45
  5. Réponses: 4
    Dernier message: 11/05/2006, 16h57

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