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

ASP.NET Discussion :

Question technique concernant la connexion à Sql serveur


Sujet :

ASP.NET

  1. #1
    Membre régulier Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Points : 83
    Points
    83
    Par défaut Question technique concernant la connexion à Sql serveur
    Bonjour,

    J'ai une question technique concernant les connexions à Sql Serveur depuis les pages Asp.Net

    Actuellement, j'ai l'habitude de créer une classe vb dans le dossier App_code de mon site web, dans lequel je déclare plusieurs variables de chaines de connexions (faites pas attention au IP et autres, c'est bidon ici,c'est juste pour l'exemple) :

    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
    Private strConnDefault As String = "Data Source=10.0.0.1;Initial Catalog=MaBase1;Persist Security Info=True;User ID=user1;Password=mdp1"
         Private strConnAltern1 As String = "Data Source=10.0.0.1;Initial Catalog=MaBase2;User ID=user2;Password=mdp2"
         Private strConnAltern2 As String = "Data Source=10.0.0.1;Initial Catalog=MaBase3;User ID=user3;Password=mdp3"
     
         Public Sub New()
            strConnectionString = strConnDefault 
            cnn = New SqlConnection()
            cnn.ConnectionString = strConnectionString
            arParams = New ArrayList
         End Sub
     
        Public Sub UseAternateConn(ByVal intParam As Integer)
            Select Case intParam
                Case 1
                    strConnectionString = strConnAltern1 
                Case 2
    		strConnectionString = strConnAltern2
                Case Else
                    strConnectionString = strConnDefault
            End Select
            cnn.ConnectionString = strConnectionString
        End Sub

    Sur une page web, je n'utilise que la première connexion du haut (strConnDefault) et jamais les autres. les autres sont par contre utilisées dans d'autres pages du site, donc voilà pourquoi je les ai besoin.
    Sur la page web en question, je lis une quantité volumineuse de données et du coup, la page pas mal de temps à s'afficher sur le site web (3 à 4 secondes).
    Mon collègue prétend que mon code ci-dessus est trop lourd et qu'il ralenti l'affichage. Qu'en enlevant les 2 autres chaines de connexion ça va plus vite.
    Je voudrais juste avoir une confirmation, une variable déclarée dans une classe vb qui n'est pas utilisée dans un objet crée et du type de la classe, si la variable n'est pas utilisée, le code ne va pas de lui-même aller lire ces variables et vérifier les connexions de lui même ???? Non parceque là il en vient à me faire douter de moi .... je ne vois pas en quoi déclarer plusieurs variables peut ralentir mon code si je ne les utilise pas....

    Merci pour ces infos.

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Déjà, il vaut mieux stocker les chaînes de connexion dans le web.config plutôt que directement dans le code, ça permet de pouvoir les modifier sans avoir à redéployer l'application. Il faut ajouter ceci par exemple dans le web.config :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <connectionStrings>
        <add name="Connection1" value="la chaine de connexion 1" />
        <add name="Connection2" value="la chaine de connexion 2" />
        <add name="Connection3" value="la chaine de connexion 3" />
    </connectionStrings>
    Ensuite pour les récupérer dans l'application, il faut procéder comme suit :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim strConn1 As String = ConfigurationManager.ConnectionStrings("Connection1").ConnectionString
    Dim strConn2 As String = ConfigurationManager.ConnectionStrings("Connection2").ConnectionString
    Dim strConn3 As String = ConfigurationManager.ConnectionStrings("Connection3").ConnectionString

    Citation Envoyé par Stephane_br Voir le message
    Sur la page web en question, je lis une quantité volumineuse de données et du coup, la page pas mal de temps à s'afficher sur le site web (3 à 4 secondes).
    Qu'entends-tu par quantité volumineuse ? La requête est-elle bien écrite ? Y'a-t-il des index sur les bonnes colonnes ? Utilises-tu les requêtes paramétrées afin de figer le plan d'exécution ?

    Combien de lignes sont ramenées ?

    Citation Envoyé par Stephane_br Voir le message
    Mon collègue prétend que mon code ci-dessus est trop lourd et qu'il ralenti l'affichage. Qu'en enlevant les 2 autres chaines de connexion ça va plus vite.
    Non, ton collègue a tord. Tout ce que tu fais, c'est juste mettre la chaîne de connexion dans une variable de type string. Ensuite elle n'est utilisée que si ton code l'utilise, ce qui n'est pas le cas systématiquement avec ce que tu nous montres.

    Citation Envoyé par Stephane_br Voir le message
    Je voudrais juste avoir une confirmation, une variable déclarée dans une classe vb qui n'est pas utilisée dans un objet crée et du type de la classe, si la variable n'est pas utilisée, le code ne va pas de lui-même aller lire ces variables et vérifier les connexions de lui même ???? Non parceque là il en vient à me faire douter de moi .... je ne vois pas en quoi déclarer plusieurs variables peut ralentir mon code si je ne les utilise pas....
    C'est confirmé, pas de problème particulier à faire ce que tu fais Par contre il faut voir pourquoi est-ce que ça met du temps à charger, et ça c'est une autre paire de manches.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre régulier Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Points : 83
    Points
    83
    Par défaut
    Super, merci beaucoup pour votre réponse.
    Je vais de ce pas déjà modifier mon webconfig et appeler les connexions comme vous me conseillez.

    Ensuite, pour la lenteur, j'ai bien mis des index dans les tables concernées, mais peut-être les ais-je mal configurés... concernant mes requêtes, j'ai essayé d'optimiser au mieux mais effectivement il y a peut-être quelque chose à faire encore....
    Par quantité volumineuse, je dois lire dans plusieurs tables, l'une de plus de 2000000 de lignes, l'autre de près de 600000 lignes, tout en devant faire des calculs derrière pour sortir des prix qui ne sont pas stockées dans ces bases et qui dépendent d'un login client, etc....

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Stephane_br Voir le message
    Ensuite, pour la lenteur, j'ai bien mis des index dans les tables concernées, mais peut-être les ais-je mal configurés... concernant mes requêtes, j'ai essayé d'optimiser au mieux mais effectivement il y a peut-être quelque chose à faire encore....
    Pour savoir si tu as bien positionné tes index, tu peux regarder le plan d'exécution de la requête. En général si tu vois des Full Scan (pas des Index Full Scan) c'est qu'il en manque un... Attention si tu ne vois pas cette mention, ça ne signifie pas pour autant qu'il n'en manque pas.

    Citation Envoyé par Stephane_br Voir le message
    Par quantité volumineuse, je dois lire dans plusieurs tables, l'une de plus de 2000000 de lignes, l'autre de près de 600000 lignes, tout en devant faire des calculs derrière pour sortir des prix qui ne sont pas stockées dans ces bases et qui dépendent d'un login client, etc....
    Ok si la modélisation est bonne, et si la requête l'est aussi, ça ne devrait pas poser de soucis particuliers. Quel est ton SGBDR ? Combien de lignes sont remontées par la requête ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre régulier Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Points : 83
    Points
    83
    Par défaut
    Dernière petite question, est-ce le fait de mettre mon code à l'intérieur de...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Try
      ...
      ...
      ..
      .
    Catch ex As Exception
      ...
    End Try
    ... peut ralentir l’exécution du code ?

    En fait, j'utilise cela de cette manière :
    - ouvrir la connexion Sql,
    - mon code est ensuite palcé dans un try...catch...
    - et en dehors à la fin, je ferme ma connexion.

    Ainsi, ceci afin de toujours fermer ma connexion, même en cas d'erreur.

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Le try/catch est un mécanisme coûteux s'il est utilisé à tort et à travers, ce qui ne semble pas être ton cas. En tout cas, ça n'explique pas un ralentissement de quelques secondes.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  7. #7
    Membre régulier Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Points : 83
    Points
    83
    Par défaut
    Merci beaucoup pour tous vos conseils.

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

Discussions similaires

  1. connexion SQL serveur à eclipse?
    Par makaphrodite dans le forum JDBC
    Réponses: 5
    Dernier message: 15/08/2007, 01h29
  2. connexion à sql serveur
    Par new_wave dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/10/2006, 10h29
  3. Connexion SQL serveur et Centura team developer
    Par kenzi dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 16/03/2006, 08h28
  4. Connexion SQL serveur à WinDev
    Par stkam dans le forum WinDev
    Réponses: 2
    Dernier message: 29/03/2005, 08h54
  5. connexion sql serveur
    Par DiJiRiDouS dans le forum ASP
    Réponses: 10
    Dernier message: 16/09/2003, 16h14

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