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 :

Convertir chaine sql en stringbuilder


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Convertir chaine sql en stringbuilder
    Bonjour

    Il m'arrive souvent de transposer une requete SQL en StringBuilder

    Trop souvent a mon gout !
    Et c'est chaque fois asser pénible de redecouper la chaine honteusement déstructuée par SQL Management Studio pour une remise en forme humainement lisible a coup des Append dans un stringbuilder

    Donc j'ai décidé s'écrire un petit outil qui fait ca automatiquement.

    Mais avant de me lancer, avez-vous déja vu qq chose dans ce genre ?

    Merci

  2. #2
    Membre éprouvé
    Inscrit en
    Mars 2005
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 131
    Par défaut
    Bonjour,

    Tu peux stp illustrer ton propos avec un exemple concret ?

    Merci

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    je ne vois pas du tout ce que tu fais ou alors je ne vois pas l'utilité ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    si finalement je crois avoir compris
    tu fais une requete dans sql server et tu la colles dans ton code et tu pleures voyant l'étendu des dégats ^^

    alors le mieux c'est d'ajouter un nouveau fichier au projet, fichier de type texte (.txt)
    tu colles ta requetes dedans
    l'ajouter ensuite dans les ressources (drag drop sur les ressources du projet)
    et ensuite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    moncommand.commandtext = my.Resources.nom_du_fichier_texte
    un fichier texte en ressources étant transformé en string à l'utilisation

    (en espérant que ca existe en c#, enfin en vb.net my.resources existe)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci

    Voici un exemple concret

    Ceci

    Code sql : 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
    SELECT     COUNT(*) AS cnt,
     PhysicalBag.ID, PhysicalBag.Number, PhysicalBag.FillingLevel AS FLev, PhysicalBag.OpenDate, PhysicalBag.CloseRequestDate AS CloseNeedDt, 
          PhysicalBag.CloseRequiredDate AS CloseAskedDt, PhysicalBag.CloseDate AS CloseDt, PhysicalBag.ParcelCollectDefer AS ColectDay, 
      PhysicalBag.ReceivedDate AS ReceivedDt, 
               PhysicalBag.DispatchedDate, Affiliate.HRK, Affiliate.Name, Affiliate.PhoneNumber, Affiliate.FaxNumber, 
                  Affiliate.GSMNumber, Affiliate.Email
    FROM PhysicalBag INNER JOIN
          Affiliate ON PhysicalBag.AffiliateID = Affiliate.ID INNER JOIN
      VirtualBag ON PhysicalBag.ID = VirtualBag.PhysicalBagID INNER JOIN
                          TradeIn ON VirtualBag.ID = TradeIn.VirtualBagID
    WHERE     (PhysicalBag.OpenDate < CONVERT(DATETIME, '2010-07-30 00:00:00', 102)) AND (PhysicalBag.CloseDate IS NULL) AND (PhysicalBag.CloseRequestDate IS NULL)
    GROUP BY PhysicalBag.ID,
     PhysicalBag.Number, PhysicalBag.FillingLevel
     , PhysicalBag.OpenDate, PhysicalBag.CloseRequestDate, PhysicalBag.CloseRequiredDate, 
         PhysicalBag.CloseDate, PhysicalBag.ParcelCollectDefer, PhysicalBag.ReceivedDate, PhysicalBag.DispatchedDate, Affiliate.HRK, Affiliate.Name, 
     Affiliate.PhoneNumber,
     Affiliate.FaxNumber, Affiliate.GSMNumber, Affiliate.Email

    Peut devenir cela...
    (Mais entretemps j'ai déja ecris la procédure qui permet en plus de passer par le clipboard

    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
    38
    39
    40
    41
    42
    43
          StringBuilder sb = new StringBuilder();
          sb.Append(" SELECT ");
          sb.Append(" COUNT(*) AS cnt,");
          sb.Append(" PhysicalBag.ID,");
          sb.Append(" PhysicalBag.Number,");
          sb.Append(" PhysicalBag.FillingLevel AS FLev,");
          sb.Append(" PhysicalBag.OpenDate,");
          sb.Append(" PhysicalBag.CloseRequestDate AS CloseNeedDt,");
          sb.Append(" PhysicalBag.CloseRequiredDate AS CloseAskedDt,");
          sb.Append(" PhysicalBag.CloseDate AS CloseDt,");
          sb.Append(" PhysicalBag.ParcelCollectDefer AS ColectDay,");
          sb.Append(" PhysicalBag.ReceivedDate AS ReceivedDt,");
          sb.Append(" PhysicalBag.DispatchedDate,");
          sb.Append(" Affiliate.HRK,");
          sb.Append(" Affiliate.Name,");
          sb.Append(" Affiliate.PhoneNumber,");
          sb.Append(" Affiliate.FaxNumber,");
          sb.Append(" Affiliate.GSMNumber,");
          sb.Append(" Affiliate.Email");
          sb.Append(" FROM");
          sb.Append(" PhysicalBag ");
          sb.Append("  INNER JOIN Affiliate ON PhysicalBag.AffiliateID = Affiliate.ID ");
          sb.Append("  INNER JOIN VirtualBag ON PhysicalBag.ID = VirtualBag.PhysicalBagID ");
          sb.Append("  INNER JOIN TradeIn ON VirtualBag.ID = TradeIn.VirtualBagID");
          sb.Append(" where (PhysicalBag.OpenDate < CONVERT(DATETIME, '2010-07-30 00:00:00', 102)) ");
          sb.Append("   AND (PhysicalBag.CloseDate IS NULL) ");
          sb.Append("   AND (PhysicalBag.CloseRequestDate IS NULL) ");
          sb.Append(" GROUP BY PhysicalBag.ID,");
          sb.Append(" PhysicalBag.Number,");
          sb.Append(" PhysicalBag.FillingLevel,");
          sb.Append(" PhysicalBag.OpenDate,");
          sb.Append(" PhysicalBag.CloseRequestDate,");
          sb.Append(" PhysicalBag.CloseRequiredDate, ");
          sb.Append(" PhysicalBag.CloseDate,");
          sb.Append(" PhysicalBag.ParcelCollectDefer,");
          sb.Append(" PhysicalBag.ReceivedDate,");
          sb.Append(" PhysicalBag.DispatchedDate,");
          sb.Append(" Affiliate.HRK, Affiliate.Name, ");
          sb.Append(" Affiliate.PhoneNumber,");
          sb.Append(" Affiliate.FaxNumber,");
          sb.Append(" Affiliate.GSMNumber,");
          sb.Append(" Affiliate.Email");
          sb.Append("   having (COUNT(*)>5)");

  6. #6
    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
    Oui, et pourquoi tu utilises un StringBuilder ici?
    J'avoue ne pas du tout comprendre : tu ne rajoutes pas d'élements conditionel nécessitant l'AppendFormat.

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Oui, et pourquoi tu utilises un StringBuilder ici?
    J'avoue ne pas du tout comprendre : tu ne rajoutes pas d'élements conditionel nécessitant l'AppendFormat.

    un stringbuilder est des centaines (des millions ?) de fois plus performant qu'un string pour de la concaténation



    Citation Envoyé par SetaSensei Voir le message
    Bonjour,

    Dans un soucis de lisibilité, n'avez-vous jamais pensé passer par une vue, voire une procédure stockée sur votre base ?

    les vues c'est pas mal sauf que pour une modif simple du code il faut ouvrir le sgbdr pour aller voir ce que fait la vue au lieu d'avoir le code sous la main
    et puis une vue c'est trop simple, on peut modifier la requete sans avoir à recompiler l'exe ... c'est pas drole
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Ce que tu dis est vrai quand le compilo ne sait pas ce que tu concatènes ; mais il est assez malin pour traiter statiquement string bidule = "a + "b" (qui devient string bidule = "ab" dans le bytecode). Donc l'argument de la perte de perfs n'est pas valide

    Et même, plutôt que de préfixer chaque ligne par " et la suffixer par " + , il est bien plus simple d'utilser ce cher @, de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      string request = 
    @"
    SELECT trucmuche
    FROM TABLE_MACHIN
    ";
    C'est tout de même plus simple.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    un stringbuilder est des centaines (des millions ?) de fois plus performant qu'un string pour de la concaténation
    Oui et non... si c'est pour un nombre limité de concaténations (a priori quelques dizaines grand max dans un cas comme celui là), ça ne fait pas une grosse différence.

    Par contre, si tu fais des concaténations en boucle, avec potentiellement un grand nombre d'itérations, là il faut absolument utiliser StringBuilder pour éviter de créer inutilement des tonnes d'instances de String de plus en plus longues...

  10. #10
    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 Pol63 Voir le message
    un stringbuilder est des centaines (des millions ?) de fois plus performant qu'un string pour de la concaténation
    Je le sais, mais ici il n'a pas de concaténation à faire justement.

  11. #11
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    on a du se croiser au niveau des posts
    ma réponse devrait te convenir, vu que dans le fichier texte tu fais la mise en forme que tu veux comme dans l'ide sql

    et le fichier txt va etre compilé dans l'exe
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  12. #12
    Membre éclairé Avatar de SetaSensei
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Par défaut
    Bonjour,

    Dans un soucis de lisibilité, n'avez-vous jamais pensé passer par une vue, voire une procédure stockée sur votre base ?

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

Discussions similaires

  1. [AC-2007] Convertir un Recordset en Chaine Sql
    Par Abed_H dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 18/02/2010, 12h14
  2. Convertir chaines en float
    Par Nasky dans le forum C
    Réponses: 17
    Dernier message: 30/04/2006, 21h03
  3. [PL / SQL] Convertir chaine en tableau de char
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 3
    Dernier message: 06/02/2006, 10h29
  4. Convertir chaine de caractere
    Par Antoine NSG dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2005, 15h32
  5. [FLASH MX2004] Convertir chaine en date
    Par stip dans le forum Flash
    Réponses: 5
    Dernier message: 20/01/2005, 17h01

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