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 :

cast float c# en reel double dans une BDD [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Par défaut cast float c# en reel double dans une BDD
    bonjour j'ai un soucis de cast dans le code suivant. Ca plante a l'execution de la query, il n'aime pas mon float c# que j'envoie dans ma DB...
    J'ai essayé de passer par des parametres comme vous le constatez mais ca ne marche pas (j'ai presque tout essayé comme combinaison...)
    Quelqu'un peut m'orienter ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    maCommande = new OleDbCommand();
                    maCommande.Connection = maConnexion;
                    maCommande.CommandText = "UPDATE Fournisseur_Produit SET Dernier_prix = (@prix), Date_dernier_achat = (@dateAchat) WHERE ID_produit = " + fournisseurProduit.IDProduit + " AND ID_fournisseur = " + fournisseurProduit.IDFournisseur;
                    maCommande.Parameters.Add("@dateAchat", OleDbType.DBDate).Value = fournisseurProduit.DateDernierAchat;
                    maCommande.Parameters.Add("@prix", OleDbType.Double).Value = fournisseurProduit.DernierPrix;
                    maConnexion.Open();
                    OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(maCommande);
                    OleDbDataReader dataRead = maCommande.ExecuteReader();
                    maConnexion.Close();
                    dataRead.Close();

  2. #2
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Salut,

    quelle est précisément l'erreur que tu obtiens ?
    As-tu essayé de convertir ton float en double avant de le passer en paramètre ?
    Si tu passes cette exacte requête à la main sur ton client DB, elle fonctionne ?

    NB : tes ID de la clause WHERE peuvent également être passés en paramètre.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Par défaut
    Il s'agit d'une erreur de casting. Apres test, je suis sûr que c'est un problème avec le float, car lorsque je l'ai retiré de la query, ca marche.
    Alors oui j'ai essayé de convertir le float en double.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maCommande.Parameters.Add("@prix", OleDbType.Double).Value = (double)fournisseurProduit.DernierPrix;
    et j'ai essayé comme ceci aussi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maCommande.Parameters.Add("@prix", OleDbType.Double).Value = double.Parse(fournisseurProduit.DernierPrix.ToString());
    et j'ai essayé aussi en changeant le casting sur le parametre avec et sans le casting à droite...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maCommande.Parameters.Add("@prix", OleDbType.Decimal).Value = fournisseurProduit.DernierPrix;
    J'avais lu quelque part que les floats en c# sont des doubles dans une DB.

  4. #4
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Oki, creusons encore un peu :
    quel SGBD utilises-tu ?
    comment, précisément, est déclaré en base le champ que tu veux modifier ?
    as-tu toujours l'erreur en faisant un test avec un double en dur ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Par défaut
    J'utilise Access 2010.
    Mon champ est en réel simple pour le moment (j'ai testé le réel double et le décimal, mais peu importe il devrait y avoir moyen de faire rentrer une valeur que ça soit du réel simple, double ou décimal à condition de bien le cast ...).

    Je vais essayer avec des valeurs en dur.


    merci pour l'aide je posterai ce que j'obtiens avec les valeurs en dur.

    edit : j'ai testé avec une variable float = x.y, avec double = x.yF ca marche toujours pas T.T...

    "Type de données incompatible dans l'expression du critère". Voila le message que j'obtiens.

  6. #6
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Je suis pas expert en Access mais "réel simple" ça sonne comme "simple précision", autrement dit "single" aka "float".
    Du coup il faudrait tenter de caster ta valeur en float et de définir ton paramètre comme OleDbType.Single.

    En fait faire l'inverse de ce que tu cherches à faire depuis le début

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

Discussions similaires

  1. Formatter un double dans une MsgBox
    Par cjacquel dans le forum IHM
    Réponses: 1
    Dernier message: 18/09/2007, 13h27
  2. mettre des doubles dans une formule?
    Par smedini dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/08/2007, 15h24
  3. Réponses: 5
    Dernier message: 06/02/2007, 13h46
  4. [C/C++] afficher des doubles dans une message box
    Par lalaurie40 dans le forum MFC
    Réponses: 1
    Dernier message: 24/05/2005, 14h55
  5. Réponses: 3
    Dernier message: 12/06/2002, 21h15

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