0
votes

La valeur décimale est arrondi lors de la saisie de DB

J'essaie de télécharger une valeur décimale dans une base de données.

Avant le téléchargement (tout en débogage C #) C'est décimal mais lorsqu'il est inséré dans la base de données, c'est la décimale est arrondie donc il n'y a pas de chiffres, mais zéro après le point décimal. Pourquoi? P>

Déclaration de variable: p> xxx pré>

affectation: p> xxx pré>

Téléchargement: p> XXX PRE>

DB: P>

CREATE TABLE [dbo].[Phones] (
[Id]          INT             IDENTITY (1, 1) NOT NULL,
[devicename]  NVARCHAR (50)   NULL,
[batterylife] INT             DEFAULT ((0)) NULL,
[price]       INT             DEFAULT ((0)) NULL,
[BasemarkX]   INT             DEFAULT ((0)) NULL,
[year]        INT             DEFAULT ((0)) NULL,
[ImageURL]    NVARCHAR (MAX)  NULL,
[screensize]  DECIMAL (18, 4) DEFAULT ((0)) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);


5 commentaires

Pouvez-vous montrer la partie de votre code qui définit les paramètres de la commande?


Je suis d'accord avec Steve, cela aiderait à connaître le type du paramètre @Screensize sur cmd


@RYANANWC Si je vous comprends correctement le type de @Screensize est écrit sous DB:


Veuillez afficher l'ensemble du code où vous déclarez la variable CMD et où vous créez les paramètres. Le code ci-dessus ne suffit pas pour identifier exactement le problème. Nous ne pouvons que deviner et deviner à tort


@Steve thnx que d'où l'erreur était


3 Réponses :


2
votes

vous Screensize variable est décimal (18, 4) . Il peut donc contenir un nombre maximum de 18 chiffres et vous êtes autorisé à avoir 4 chiffres après le point flottant et si vous avez plus de chiffres de points flottants, il sera arrondi.


4 commentaires

Cela traite-t-il vraiment de "il n'y a-t-il pas de chiffres, mais zéro après le point décimal" problème?


@ Antonínlejsek Si le numéro à enregistrer est 23.0000521 oui


Eh bien, si vous rencontrez une taille d'écran comme celle-ci, laissez-moi savoir ;-)


Tout comme @ Antonínlejsek a mentionné que ce n'est pas le genre de chiffres que je traite



1
votes

Il est essentiel de comprendre le fonctionnement de type décimal dans SQL. Décimal (taille, d), comme la taille, détermine la longueur totale de la valeur, y compris les chiffres après le point flottant, par exemple si vous avez une valeur '500000.00' et décimal (8,2) représente que vous ne pouvez avoir qu'un total de 8 chiffres et seuls 2 chiffres sont autorisés après le point décimal.

Dans votre cas, la taille du paramètre est décimale (18, 4), ce qui signifie que 4 chiffres de points flottants sont autorisés si un nombre comporte plusieurs chiffres qu'il ne sera tronqué par SQL Server.


2 commentaires

thnx mais c'est même que la dernière réponse qui ne fonctionne pas pour moi


C'est-à-dire parce que "cmd.parameterers.add (nouveau sqlparameter (" @ Screensize ", SQLDBType.int));" "Sqldbtype.int" devrait être sqldbtype.decimal, sélectionnez un type de données correct.



0
votes

Le problème est causé par votre définition du paramètre @ScreenSize
Vous avez déclaré qu'il est de type SQLDBType.int et, même si, vous pouvez définir la propriété de valeur du paramètre sur une valeur d'un type différent (comme une décimale), lorsque vous envoyez ce paramètre au moteur de base de données, il sera Arrondé à l'entier le plus proche et vous voyez cette valeur dans votre table de base de données.

Lorsque vous utilisez des paramètres est de la plus haute importance pour leur donner le type de données attendu dans la table de base de données.

déclarer ce paramètre comme xxx


0 commentaires