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 :

probleme requete sql select


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Étudient ingénieur système d'information mobile
    Inscrit en
    Mars 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudient ingénieur système d'information mobile

    Informations forums :
    Inscription : Mars 2007
    Messages : 131
    Points : 58
    Points
    58
    Par défaut probleme requete sql select
    Bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                string repertoire_a_supprime = "";
     
                SqlDataAdapter adapter = new SqlDataAdapter(" select repertoire from fichier where nom='" + repertoire_a_supprime + "'", Classe_methode_statique.con);
     
    // issi comment récupéré la valeur
     
                System.IO.File.Delete(reprtoire;
    comment extraire la repertoire du tableaux pour surprime le fichier ?
    Merci.

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    utilises un datareader plutot qu'un dataadapter

  3. #3
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    J'aimerais bien comprendre pourquoi 90% des débutants se croient obligés d'utiliser des DataAdapter, et ne savent pas utiliser un DataReader
    Ca fait des années que cette question me turlupine : où est ce tutoriel débile qui apprend à utiliser un DataAdapter même pour récupérer une seule valeur ?!


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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    à mon avis c'est les 3/4 des tutoriels, qui expliquent : un command, un dataadapter, un dataset et un datagridview ...

  5. #5
    Membre émérite
    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
    Points : 2 498
    Points
    2 498
    Par défaut
    Citation Envoyé par Tomlev
    J'aimerais bien comprendre pourquoi 90% des débutants se croient obligés d'utiliser des DataAdapter, et ne savent pas utiliser un DataReader
    C'est marrant j'avais juste l'impression inverse

    Il faut dire que dans 80% des cas un DataAdapter c'est quand meme plus pratique qu'un DataReader

    Et dans 15% du reste quand on veut juste recuperer une donnée on peut faire un executeScalar

    Personellement je n'utilise le datareader que quand je dois recuperer un stream de données binaires comme des images ou de la musique (et chaque fois je peste contre ceux qui on jugé utile de mettre de tels fichiers en DB)

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    comme quoi c'est une question d'habitude ...
    on a des dizaines de milliers de lignes de code et personne dans l'équipe de sait à quoi sert le dataadapter ^^

  7. #7
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par olibara Voir le message
    Il faut dire que dans 80% des cas un DataAdapter c'est quand meme plus pratique qu'un DataReader

    Et dans 15% du reste quand on veut juste recuperer une donnée on peut faire un executeScalar
    Je ne pense pas qu'on puisse vraiment donner des proportions chiffrées, ça dépend complètement des projets... selon les cas, l'un est plus pratique que l'autre, c'est tout.

    Mais quand c'est pour récupérer une valeur, ou même une ligne de données, utiliser un DataAdapter, c'est vraiment sortir l'artillerie lourde pour écraser une mouche.

    D'autre part, le mode déconnecté (DataAdapter + DataSet) suppose de charger toutes les données en mémoire, ce qui n'est pas forcément adapté si tu as beaucoup de données à traiter. Pour un processus de type "batch" qui doit traiter des millions d'enregistrement, tu es pratiquement obligé d'utiliser un DataReader, ou alors tu vas utiliser une quantité monstrueuse de mémoire...

    Mais ce qui m'agace le plus, c'est quand je vois quelqu'un qui crée un DataAdapter, lui affecte une SelectCommand, puis utilise la commande en faisant adapter.SelectCommand.ExecuteReader().... ça prouve vraiment qu'il a rien compris à ce qu'est un DataAdapter

    Bref, je ne condamne pas les DataAdapter en tant que tels, je critique seulement leur utilisation à mauvais escient, très fréquente chez les débutants...

    Citation Envoyé par olibara Voir le message
    (et chaque fois je peste contre ceux qui on jugé utile de mettre de tels fichiers en DB)
    Tu n'as pas toujours d'autres options... par exemple si la DB est distante et que tu n'as pas accès au système de fichier distant, mettre les images dans la DB est une bonne solution.


    Bref, tout ça ne fait pas beaucoup avancer le problème de yassin123441
    D'ailleurs, dans ce cas il n'y a même pas besoin de DataReader, il suffit de faire un ExecuteScalar sur la commande puisqu'il n'y a qu'une valeur à récupérer... voilà le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                SqlCommand command = new SqlCommand("select repertoire from fichier where nom='" + repertoire_a_supprime + "'", Classe_methode_statique.con);
                string repertoire = command.ExecuteScalar() as string;
                System.IO.File.Delete(repertoire);
    Soit dit en passant, évite de construire des chaines par concaténation... Avec ce code, si repertoire_a_supprimer contient une apostrophe, la commande générée sera incorrecte et causera une erreur. Utilise plutôt des requêtes paramétrées comme expliqué dans ce tuto

  8. #8
    Membre émérite
    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
    Points : 2 498
    Points
    2 498
    Par défaut
    Citation Envoyé par TomLev
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                SqlCommand command = new SqlCommand("select repertoire from fichier where nom='" + repertoire_a_supprime + "'", Classe_methode_statique.con);
                string repertoire = command.ExecuteScalar() as string;
                System.IO.File.Delete(repertoire);
    Soit dit en passant, évite de construire des chaines par concaténation...
    Ca donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Au Moins pire :
    string Select = String.Format("select repertoire from fichier where nom='{0}'", repertoire_a_supprime);
    SqlCommand MyCmd = new SqlCommand(Select, Classe_methode_statique.con);
    // etc ..
    // (mais tu risque toujours une injection sql et des tas d'autres problèmes)
     
    // Sinon ceci c'est Mieux 
     
    string Select = String.Format("select repertoire from fichier where nom=@RepSup";
    SqlCommand MyCmd = new SqlCommand(Select, Classe_methode_statique.con);
          MyCmd.Parameters.AddWithValue("@RepSup", repertoire_a_supprime);

  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
    Points : 39 753
    Points
    39 753
    Par défaut
    Ton "moins pire" rend le code plus lisible mais ne règle pas le problème des apostrophes

  10. #10
    Membre émérite
    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
    Points : 2 498
    Points
    2 498
    Par défaut
    Salut Tomlev

    Ton "moins pire" rend le code plus lisible mais ne règle pas le problème des apostrophes
    C'est ce que j'avais dis ... non ?

    // etc ..
    // (mais tu risque toujours une injection sql et des tas d'autres problèmes)
    (il n'y a pas que les apostrophe)

  11. #11
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    ah oui, j'avais pas fait gaffe au commentaire du dessous...

  12. #12
    Membre du Club
    Homme Profil pro
    Étudient ingénieur système d'information mobile
    Inscrit en
    Mars 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudient ingénieur système d'information mobile

    Informations forums :
    Inscription : Mars 2007
    Messages : 131
    Points : 58
    Points
    58
    Par défaut
    merci
    se code de tomlev ma bien aide pour récupéré une seule valeur dans mes prochaine requete ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                SqlCommand command = new SqlCommand("select repertoire from fichier where nom='" + repertoire_a_supprime + "'", Classe_methode_statique.con);
                string repertoire = command.ExecuteScalar() as string;
                System.IO.File.Delete(repertoire);

    que j'ai remplace par mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SqlDataAdapter adapter = new SqlDataAdapter(" select repertoire from fichier where nom='" + nom_a_supprime + "'", Classe_methode_statique.con);
                DataTable dtt = new DataTable();
                adapter.Fill(dtt);
                repertoire_a_supprime = dtt.Rows[0][0].ToString();

  13. #13
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par yassin123441 Voir le message
    que j'ai remplace par mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SqlDataAdapter adapter = new SqlDataAdapter(" select repertoire from fichier where nom='" + nom_a_supprime + "'", Classe_methode_statique.con);
                DataTable dtt = new DataTable();
                adapter.Fill(dtt);
                repertoire_a_supprime = dtt.Rows[0][0].ToString();
    Argh
    Tu n'as rien lu du débat ci-dessus à propos des DataAdapter si j'ai bien compris

  14. #14
    Membre du Club
    Homme Profil pro
    Étudient ingénieur système d'information mobile
    Inscrit en
    Mars 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudient ingénieur système d'information mobile

    Informations forums :
    Inscription : Mars 2007
    Messages : 131
    Points : 58
    Points
    58
    Par défaut
    j'ai bien lu tout le débat

  15. #15
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par yassin123441 Voir le message
    j'ai bien lu tout le débat
    Mais tu t'en fous pas mal on dirait
    Enfin bon, tu fais ce que tu veux...

Discussions similaires

  1. Probleme Requete SQL SELECT
    Par paulo6907 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 28/10/2006, 11h07
  2. [POSTGRESQL] Requete SQL SELECT
    Par angusyoung34 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 18/02/2006, 09h30
  3. probleme requete SQL
    Par grochenel dans le forum Langage SQL
    Réponses: 7
    Dernier message: 12/12/2005, 09h26
  4. [MySQL] probleme requete sql et php
    Par digger dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 10/10/2005, 14h15
  5. probleme requete sql
    Par Shosho dans le forum Langage SQL
    Réponses: 12
    Dernier message: 03/05/2005, 09h25

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