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 :

Requete SELECT, PB de format de variable


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 81
    Par défaut Requete SELECT, PB de format de variable
    Bonjour,
    j'ai un petit souci dans une requete SQL

    mon souci vien de cette partie de ma requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND DL_QteBL > '" + rdr4.GetString(1) + "'
    Le rdr4 viens d'une précédente requete que voici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlstr4 = "select distinct CATEGORIE,SEUIL_NDP,AR_Ref from F_ARTICLE WHERE CATEGORIE <> 'NULL' ";
    Dans les deux tables les colones de ses champs sont en numeric.

    Quand j'ai des colones en varcher avec du GetString ca marche mais la il en veux pas j'ai essayer pas mal de get different (decimal, float, int) mais il me fait toujours une erreur sur cette partie de ma requete.

    Merci pour votre aide

    Thierry

  2. #2
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    je ne pense pas que ce soit réellement le bon forum pour poster vu qu'il s'agit de sql, mais avec mes maigres compétences je vais essayer un début de réponse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND DL_QteBL > '" + rdr4.GetString(1) + "'
    Dans les deux tables les colones de ses champs sont en numeric.
    essaye d'éviter les quotes si les deux sont du numérique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND DL_QteBL > " + rdr4.GetString(1) + "

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 81
    Par défaut
    Merci pour cet reponse rapide, mais ce ne change pas mon souci.
    Je met le message exacte de l'erreur

    Impossible d'effectuer un cast d'un oblet de type "System.Decimal" en type "System.String"
    Merci

    Thierry

  4. #4
    Membre Expert Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rdr4.GetString(1).ToString()
    Erreur de débutant

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 81
    Par défaut
    Merci pour cet réponse

    Alors avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND DL_QteBL >'" + rdr4.GetString(1).ToString() + "'
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND DL_QteBL >" + rdr4.GetString(1).ToString() + "
    j'ai la meme erreur a savoir

    Impossible d'effectuer un cast d'un oblet de type "System.Decimal" en type "System.String"
    j'ai essayer avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND DL_QteBL > rdr4.GetString(1).ToString()
    et la j'ai une autre erreur ailleurs bizarre qui est
    "Ligne 1 : syntaxe incorrecte vers '.'."
    Merci de votre aide

    Thierry

  6. #6
    Membre Expert Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Par défaut
    poste ta ligne qui crée l'erreur...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND DL_QteBL >'" + rdr4.GetString(1).ToString() + "'"

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 81
    Par défaut
    Voici ma lrequete en totalité

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlstr = "select * from F_DOCLIGNE where YEAR(DL_DateBL) = '" + textBox2.Text + "' AND MONTH(DL_DateBL) = '" + textBox1.Text + "' AND AR_Ref LIKE '" + rdr4.GetString(2) + "' AND DL_QteBL > '" + rdr4.GetString(1).ToString() + "'";
    Sachant que cet requete marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlstr = "select * from F_DOCLIGNE where YEAR(DL_DateBL) = '" + textBox2.Text + "' AND MONTH(DL_DateBL) = '" + textBox1.Text + "' AND AR_Ref LIKE '" + rdr4.GetString(2) + "'";
    Merci pour votre patience

    Thierry

  8. #8
    Membre Expert Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlstr = "select * from F_DOCLIGNE where YEAR(DL_DateBL) = '" + textBox2.Text + "' AND MONTH(DL_DateBL) = '" + textBox1.Text + "' AND AR_Ref LIKE '" + rdr4.GetString(2) + "' AND DL_QteBL > " + rdr4.GetString(1).ToString() ;

    il faut enlever les ' quand tu as du numérique

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 81
    Par défaut
    Bonsoir,

    même message d'erreur avec cet version
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlstr = "select * from F_DOCLIGNE where YEAR(DL_DateBL) = '" + textBox2.Text + "' AND MONTH(DL_DateBL) = '" + textBox1.Text + "' AND AR_Ref LIKE '" + rdr4.GetString(2) + "' AND DL_QteBL > " + rdr4.GetString(1).ToString() ;
    Impossible d'effectuer un cast d'un oblet de type "System.Decimal" en type "System.String"
    Merci de votre aide

    Thierry

  10. #10
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    test ta requete dans le requeteur de visual studio si tu peux et regarde dans le debugger ce que te renvoie rdr4.GetString(1).ToString()

  11. #11
    Membre chevronné Avatar de _PascalC_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Vendée (Pays de la Loire)

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

    Informations forums :
    Inscription : Août 2008
    Messages : 220
    Par défaut
    Salut, l'utilisation des requêtes paramétrées devrait permettre de résoudre ton problème et aussi de contourner d'autres soucis (L'injection SQL et autres joyeusetés comme les apostrophes, format de date, nombre...)

    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
     
    using (SqlConnection c = new SqlConnection("..."))
    {
        c.Open();
        using (SqlCommand cmd = c.CreateCommand())
        {
            cmd.CommandText = "select * from F_DOCLIGNE where YEAR(DL_DateBL) = @Year AND MONTH(DL_DateBL) = @Month AND AR_Ref LIKE @Ref AND DL_QteBL > @Qte";
            cmd.Parameters.AddWithValue("@Year", textBox2.Text);
            cmd.Parameters.AddWithValue("@Month", textBox1.Text);
            cmd.Parameters.AddWithValue("@Ref", rdr4.GetString(2));
            cmd.Parameters.AddWithValue("@Qte", rdr4.GetDecimal(1));
            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                //...
            }
        }
    }
    Accessoirement pense à nommer tes composants car TextBox1, TextBox2... ce n'est pas super explicite surtout si un jour une autre personne que toi travaille sur le projet .

    Concernant le champs "DL_DateBL" je suppose qu'il est de type DateTime (ou équivalent). Dans ce cas essaie plutôt de faire un requêtage de ce type :

    Pour les données de sept. 2009 par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT * FROM F_DOCLIGNE 
    WHERE (DL_DateBL >= '20090901' AND DL_DateBL < '20091001')
    Une des principales raisons c'est qu'avec ta requête même si le champs DL_DateBL est un jour indexé, cet index ne sera jamais utilisé et le moteur de la DB sera obligé de parcourir toute la table.

  12. #12
    Membre confirmé
    Profil pro
    Responsable informatique
    Inscrit en
    Mars 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 112
    Par défaut
    Salut Avatar69,

    Juste une suggestion, si tu essaies de caster:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    AND DL_QteBL > CAST(rdr4.GetString(1) AS decimal)
    Ou
    CONVERT(decimal, rdr4.GetString(1))
    A+

  13. #13
    Membre chevronné Avatar de _PascalC_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Vendée (Pays de la Loire)

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

    Informations forums :
    Inscription : Août 2008
    Messages : 220
    Par défaut
    Le problème c'est que le champs à lire est apparemment de type Decimal et donc "rdr4.GetString(1)" ne marchera pas. Un GetString est fait pour récupérer une string, pas un nombre ou une date. Pour récupérer un Decimal il faut taper sur la méthode GetDecimal() ou - à la rigueur - faire GetValue(1)

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 81
    Par défaut
    Je vous remercie pour toutes ses réponses.

    j'ai un peu creusé le sujet et j'ai peut etre trouvé mon souci.

    Mes deux colones sont bien "numeric (24,6)" par contre les nombres enregistrer dedans sont avec des virgules et non des points et je pense que mon souci viens de la (et je ne peu pas modifier les format des colonnes)

    En plus on ne se sert pas de la partie décimale.....

    il faut donc que je recupere la partie entiere de mon nombre et ca devrait marché ou que je remplace ma virgule par un point

    Merci a tous

    Thierry

  15. #15
    Membre chevronné Avatar de _PascalC_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Vendée (Pays de la Loire)

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

    Informations forums :
    Inscription : Août 2008
    Messages : 220
    Par défaut
    les nombres enregistrer dedans sont avec des virgules et non des points
    Non ! Ton SGBD stocke un nombre sur x octet(s) et pas une chaine de caractères représentant un nombre. Cette histoire de point et de virgule ce n'est que de l'affichage, dont - pour rappel - tu n'aurais pas à te soucier avec des requêtes paramétrées

  16. #16
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,
    Non ! Ton SGBD stocke un nombre sur x octet(s) et pas une chaine de caractères représentant un nombre.
    Ca dépend pas un peu des options régionnales de l'OS sur lequel se trouve la base, ainsi que de la culture de la base elle-même?

    Franchement, si tu veux 0 soucis y'a pas 36 solutions:
    1. Procédures stockées => sécurité et performance
    2. Spécification du type des valeurs passée à la procédure => plus d'erreur sur les dates et les nombres. Tu as un champ texte pour récupérer la date. Il vaut mieux utiliser un calendrier .Net ou alors être certain que tu sais où se trouve le mois et le jour. La date 01/02/2009 ne signifie pas la même chose en français et en anglais.
    3. Conversion des valeurs reçues => plus d'erreur sur les dates et les nombres

    Des exemples ici: http://dotnet.developpez.com/faq/asp...=adonetrequete

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 81
    Par défaut
    Merci a tous pour vos réponses, j'ai réussi a m'n sortir grace au requetes paramétrées

    Bravo

    Thierry

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

Discussions similaires

  1. Format de variable real
    Par drinkmilk dans le forum Langage
    Réponses: 18
    Dernier message: 22/03/2011, 15h50
  2. Problème de variable dans requete Select
    Par Avatar69 dans le forum ASP.NET
    Réponses: 6
    Dernier message: 09/10/2009, 09h11
  3. Format des chifres dans une requete SELECT
    Par Marc_27 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/09/2009, 16h59
  4. [VB6] Variable = Valeur d'une requete Select
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 23/01/2006, 14h40
  5. requete SELECT avec un nombre constant
    Par gurumeditation dans le forum Requêtes
    Réponses: 3
    Dernier message: 04/07/2003, 20h04

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