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 :

Opérateur @ devant une chaîne


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Développeur
    Inscrit en
    Avril 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2007
    Messages : 52
    Par défaut Opérateur @ devant une chaîne
    Je reviens juste un instant sur ce petit bout de code...

    Citation Envoyé par Keihilin Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    string sql = @"INSERT INTO TIETiers
                   (Nom, IdOperateur)
                   Values
                   (@Nom, @Id)";
    ...
    Pouvez-vous m'expliqeur à quoi sert le @ devant le INSERT... pour les autres, y'a pas de pblm, je sais ce qu'est une requête paramétrée.

    Merci d'avance,
    Lionel.

  2. #2
    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 : 44
    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 pot2yaourt Voir le message
    Pouvez-vous m'expliqeur à quoi sert le @ devant le INSERT... pour les autres, y'a pas de pblm, je sais ce qu'est une requête paramétrée.
    http://www.developpez.net/forums/d66...concatenation/

  3. #3
    Membre confirmé
    Profil pro
    Développeur
    Inscrit en
    Avril 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2007
    Messages : 52
    Par défaut
    Citation Envoyé par gdkenny Voir le message
    C'est juste pour permettre d'écrire une chaîne de caractère sur plusieurs ligne de ton GUI
    Ok, ça marche, merci pour l'info !
    En fait, jusqu'à présent je faisais comme ça et ça fonctionnait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    string s = "bla bla bla bla bla " +
               "bla bla bla bla bla " +
               "bla bla bla bla bla";

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    Citation Envoyé par pot2yaourt Voir le message
    Ok, ça marche, merci pour l'info !
    En fait, jusqu'à présent je faisais comme ça et ça fonctionnait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    string s = "bla bla bla bla bla " +
               "bla bla bla bla bla " +
               "bla bla bla bla bla";
    Oui, sauf que là tu accumules les concaténations, et dans ton exemple ce n'est pas une variable que tu créé, mais 3.

  5. #5
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Citation Envoyé par Keihilin Voir le message
    Oui, sauf que là tu accumules les concaténations, et dans ton exemple ce n'est pas une variable que tu créé, mais 3.
    A mon humble avis, trois concatenation, ca coute peanuts, par contre, utiliser la concatenation, c'est laisser son appli bien ouverte pour de l'injection sql

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    Citation Envoyé par pvialatte Voir le message
    A mon humble avis, trois concatenation, ca coute peanuts
    Certes, mais sur le principe cela démontre que la personne n'a peut être pas compris le comportement des strings et que du coup elle pourrait parfaitement écrire le même genre de code dans une jolie petite boucle.

  7. #7
    Membre confirmé
    Profil pro
    Développeur
    Inscrit en
    Avril 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2007
    Messages : 52
    Par défaut
    Citation Envoyé par Keihilin Voir le message
    Oui, sauf que là tu accumules les concaténations, et dans ton exemple ce n'est pas une variable que tu créé, mais 3.
    Est-ce que tu peux m'expliquer ce que tu entends par "créer 3 variables" ?

    En PHP par exemple, on concatène les chaînes de la même façon que ce que j'ai montré précédemment, à savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = "bla bla bla " + $var + " bla bla bla";
    ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $result = "bla bla bla
               bla bla bla
               bla bla bla";
    voir même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $result = "bla bla bla
               bla bla bla" + 
               $var +
               "bla bla bla";
    et sans oublier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $result = "bla bla bla
               bla bla bla
               $var
               bla bla bla";
    Bref, tout ça pour dire que je ne vois pas trop comment en écrivant sur X lignes on crée X variables.

    Pour en revenir au C#, j'ai trouvé ça et ils donnent justement un exemple de concaténation sur plusieurs lignes avec des + ET commençant par @.

  8. #8
    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 : 44
    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
    En fait ce n'est pas 3 variables, mais 3 instances de chaine.

    A chaque fois que tu fais une concaténation, ça crée une nouvelle instance avec le contenu des 2 chaines. Si tu fais 10000 concaténations dans une boucle, ça crée 10000 instances... or créer des instances d'objet est une opération relativement lourde, donc ça diminue les performances. Sans compter que la plupart des chaines "intermédiaires" ne sont plus utilisées, ce qui donne plein de boulot au garbage collector

  9. #9
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    ok, alors en fait, ce que veut dire Keihilin, c'est qu'en .net, les chaines de caracteres sont immuables

    ce que ca veut dire, c'est que si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string toto = "t" + "o" + "t" + "o";
    en memoire, ca va te prendre :
    une valeur chaine, de taille 1 : "t"
    une valeur chaine, de taille 1 : "o"
    une valeur chaine, de taille 1 : "t"
    une valeur chaine, de taille 1 : "o"
    une valeur chaine, de taille 4 : "toto"

    (bon, apres, c'est de la theorie, je crois que le compilateur sait concatener tout seul un exemple simple comme ca)

    Sur peu de concatenations, ca coute tres peu, par contre, si tu iteres une collection de string que tu concatenes, tu va te prendre un cout de perf...


    --------

    arf, grille

    Par contre, apres verif, le bout de code bete d'au-dessus donne bien:
    apres compilation

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  10. #10
    Membre confirmé
    Profil pro
    Développeur
    Inscrit en
    Avril 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2007
    Messages : 52
    Par défaut
    Ah OK, c'est compris !

    Voilà des explications claires !

  11. #11
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 20
    Par défaut
    salut tt le monde

    je sais que les amis on déjà donner de plus amples explications la-dessus mais quand même je peux dire le suivant :

    les chaînes de caractère précédées par @ on les nome "Chaînes VERBATIM", ces chaînes sont utilisés souvent quand on veut écrire des requêtes SQL.
    avantages :
    - se débarasser des problèmes que peut causé la concaténation.
    - requête facile à comprendre et modifier

  12. #12
    Membre chevronné
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Par défaut
    C'est quand même pas extraordinaire le @ :

    Si je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                string sql = @"select *
                                from MYTABLE
                                order by MYFIELD";
    et que j'affiche le contenu de sql dans le débugger, j'ai ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sql
    "select *\r\n                            from MYTABLE\r\n                            order by MYFIELD"

  13. #13
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    en même temps, c'est pas les chaines en dur dans ton code que tu affiches dans le debugger. je fais comme bratomchi, les rares cas où je dois avoir une requete à même le code, j'utilise le @. sinon, c'est tout simplement illisible.

    je l'utilise aussi bcp lorsque je dois construire des pages HTML et que la CSS est stockée dans une chaine (envoi par mail sur du Notes..)

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par Gold Bug Voir le message
    C'est quand même pas extraordinaire le @ :

    Si je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                string sql = @"select *
                                from MYTABLE
                                order by MYFIELD";
    Ecris le comme ça, ça ira mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                string sql =
    @"select *
    from MYTABLE
    order by MYFIELD";

  15. #15
    Membre chevronné
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Ecris le comme ça, ça ira mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                string sql =
    @"select *
    from MYTABLE
    order by MYFIELD";
    Mouaich... enlèvera pas les \r\n

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Ben c'est normal, puisque l'intérêt de @ est justement de maintenir tous les caractères, y compris les tab et les entrées, et que \r\n = entrée.

  17. #17
    Membre chevronné
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Ben c'est normal, puisque l'intérêt de @ est justement de maintenir tous les caractères, y compris les tab et les entrées, et que \r\n = entrée.
    Ah !!!
    Donc faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    string s = "bla bla bla bla bla " +
               "bla bla bla bla bla " +
               "bla bla bla bla bla";
    ne rend pas le même résultat que faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    string s = @"bla bla bla bla bla 
               bla bla bla bla bla 
               bla bla bla bla bla";
    C'est quand même super important de le préciser.

  18. #18
    Membre chevronné
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Par défaut
    Citation Envoyé par pvialatte Voir le message
    ok, alors en fait, ce que veut dire Keihilin, c'est qu'en .net, les chaines de caracteres sont immuables

    ce que ca veut dire, c'est que si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string toto = "t" + "o" + "t" + "o";
    en memoire, ca va te prendre :
    une valeur chaine, de taille 1 : "t"
    une valeur chaine, de taille 1 : "o"
    une valeur chaine, de taille 1 : "t"
    une valeur chaine, de taille 1 : "o"
    une valeur chaine, de taille 4 : "toto"

    (bon, apres, c'est de la theorie, je crois que le compilateur sait concatener tout seul un exemple simple comme ca)
    Exact, et c'est officiel maintenant

    Voir un article récent sur MSDN

    http://msdn.microsoft.com/en-us/library/ms228504.aspx

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Réponses: 13
    Dernier message: 21/02/2011, 10h34
  3. [Java]Indentation devant une chaîne de caractère
    Par mika0102 dans le forum Général Java
    Réponses: 3
    Dernier message: 07/08/2009, 10h35
  4. Comptage de mots dans une chaîne
    Par kikinou dans le forum Pascal
    Réponses: 10
    Dernier message: 01/01/2003, 02h27
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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