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 :

Problème de decimal SqlBulkCopy dans SQL server


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 256
    Par défaut Problème de decimal SqlBulkCopy dans SQL server
    Bonjour,

    Sous SQL Server 2005 j'ai une table avec une colonne PoidsNet de type numeric (10,2).

    Dans mon programme C#, j'ai un datatable avec lequel je copie le contenu dans ma table SQL Server avec la fonction SQLBulkCopy.

    Le soucis étant que SQL Server ne récupère pas correctement les nombres que je lui envoi.

    Par exemple, dans mon Datatable, ma colonne PoidsNet possède la valeur 5.18.
    Si je regarde dans SQL server, il m'affiche 5.17. Effectivement, si je modifie le type de la colonne PoidsNet dans SQL server en la passant en numeric (10,4), il va m'afficher 5.1799.

    Le problème vient donc de la fonction SQLBulkCopy qui copie mal les nombres decimal apparemment ?

    Comment puis je contourner le problème ?

    Merci de votre aide

    Cordialement

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    En fait tu as une différence entre décimal et double en C#
    Décimal est la valeur que tu lui donne, double est une valeur calculée.
    Je ne vais pas entrer plus en détails là-dessus parce que je n'en sais pas beaucoup plus, mais si tu veux plus d'explications tu trouveras probablement les réponses sur le net.
    A mon avis ton problème doit venir de là

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Par défaut
    Si tu veux plus d'infos sur la différence entre Double et Decimal, voici une explication assez exhaustive tiré du net :

    float and double are floating binary point types. In other words, they represent a number like this:

    10001.10010110011

    The binary number and the location of the binary point are both encoded within the value.

    decimal is a floating decimal point type. In other words, they represent a number like this:

    12345.65789

    Again, the number and the location of the decimal point are both encoded within the value - that's what makes decimal still a floating point type instead of a fixed point type.

    The important thing to note is that humans are used to representing non-integers in a decimal form, and expect exact results in decimal representations. Not all decimal numbers are exactly representable in binary floating point - 0.1, for example - so if you use a binary floating point value you'll actually get an approximation to 0.1. You'll still get approximations when using a floating decimal point as well - the result of dividing 1 by 3 can't be exactly represented, for example.

    As for what to use when:

    For values which are "naturally exact decimals" it's good to use decimal. This is usually suitable for any concepts invented by humans: financial values are the most obvious example, but there are others too. Consider the score given to divers or ice skaters, for example.

    For values which are more artefacts of nature which can't really be measured exactly anyway, float/double are more appropriate. For example, scientific data would usually be represented in this form. Here, the original values won't be "decimally accurate" to start with, so it's not important for the expected results to maintain the "decimal accuracy". Floating binary point types are much faster to work with than decimals.

  4. #4
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 256
    Par défaut
    Ok merci pour vos réponses. J'ai trouvé la solution.

    En fait dans mon DataTable ma colonne étant en type Double, je l'ai passé en type Decimal.

    SQL Server récupére bien les bons chiffres.

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

Discussions similaires

  1. Problème avec une requête dans SQL-Server
    Par krolis dans le forum Développement
    Réponses: 6
    Dernier message: 09/01/2011, 21h53
  2. Probléme ' dans SQL Server 2008
    Par Meryjean dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 22/12/2010, 10h54
  3. Réponses: 2
    Dernier message: 19/06/2009, 11h58
  4. Problème de manipulation d'enregistrement dans sql server
    Par labvivi dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/03/2007, 12h35
  5. Problème de formule dans sql server 2000
    Par flegros21 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 08/02/2007, 15h15

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