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

Oracle Discussion :

Un number en 16 bits ?


Sujet :

Oracle

  1. #1
    Membre habitué Avatar de 4rocky4
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 528
    Points : 180
    Points
    180
    Par défaut Un number en 16 bits ?
    Bonjour tout le monde,

    Pour utiliser la méthode GetInt16() sur un champ, cela marche si celui-ci est de type Number(4,0) mais pas Number(5,0).

    Un entier sur 16bits va de -32768 à 32667 si j'me trompe pas
    Cette plage n'est pas comprise dans un Number(4,0) (il va de -9999 à 9999)

    Comment faire pour que mon champ accepte les entiers sur 16 bits et soit compatible avec la méthode GetInt16() ?

    Je vous remercie par avance.
    "J'glande pas ! Ça compile ..."

    4rocky4
    - Un con qui marche ira plus loin q'un intellectuel assis -

  2. #2
    Membre habitué Avatar de 4rocky4
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 528
    Points : 180
    Points
    180
    Par défaut
    Je vais essayer d'être plus clair dans mon problème

    J'ai un programme en C# qui accède à une base de données SQLServer, contenant des champs de type SMALLINT (entier signé 16 bits). Pour récupérer les valeurs de ce type de champ, la méthode GetInt16() est utilisée.

    Je dois faire la même chose avec une base Oracle mais je ne vois pas comment gérer ce système d'entier signé sur 16 bits.

    Si je met NUMBER(5,0), je pourrais entrer des valeurs de -99999 à 99999 (ce qui est trop grand) mais qui provoque une erreur lorsque la méthode GetInt16() essaye de récupérer la valeur. Cela est normal car ce type de données permet d'enregistrer des nombres plus grands que 32767 ou plus petit que -32768.

    Si je met NUMBER(4,0), je pourrais utiliser la méthode GetInt16() correctement mais nous pourrons stocker uniquement les valeurs de -9999 à 9999.

    Comment dois-je faire pour que notre NUMBER(5,0) soit un entier sur 16 bits ?
    Je pense que cela me permettrait d'éviter l'erreur "specified cast is not valid" lorsque nous récupérons la valeur du champ avec la méthode GetInt16().

    Je vous remercie par avance pour vos suggestions.
    "J'glande pas ! Ça compile ..."

    4rocky4
    - Un con qui marche ira plus loin q'un intellectuel assis -

  3. #3
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    tu peux pas, il te faut faire un GetInt32() dont tu castes la valeur de retour en 16 bits...
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  4. #4
    Membre habitué Avatar de 4rocky4
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 528
    Points : 180
    Points
    180
    Par défaut
    J'suis vraiment surpris que Oracle ne puisse pas gérer cela

    Citation Envoyé par Vincent Rogier Voir le message
    tu peux pas, il te faut faire un GetInt32() dont tu castes la valeur de retour en 16 bits...
    ou alors je peux effectuer une conversion (C#) comme ceci :
    System.Convert.ToInt16()


    Je suis donc bien obligé de modifier tout mon programme ?
    Il faut que je trouve une solution qui puisse marcher avec SQL Server et oracle.
    "J'glande pas ! Ça compile ..."

    4rocky4
    - Un con qui marche ira plus loin q'un intellectuel assis -

  5. #5
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Oracle ne gère pas de type de données entiers de type int8, int16, int32 ou int64...

    J'suis vraiment surpris que Oracle ne puisse pas gérer cela
    Oracle gère des numbers uniquement dont la précision indique la capacité de stockage.

    La taille d'un entier au sens octets (8,16,32, 64) n'a pas de sens d'un point du vue oracle...

    Ensuite c'est aux APIs, drivers et frameworks de gérer le mapping entre la données DB et sa représentation en langage de programmation client.

    Les drivers sont plus ou moins évolués et intelligents.

    OCILIB, en C, par exemple, te permet de récupérer une valeur d'une colonne NUMBER(20,8) dans un short si elle y rentre... donc c'est plus une question d'implémentation de driver qu'un problème DB Oracle.

    Quel est le provider Oracle que tu utilise en C# ? Celui fournit par défaut ou celui d'Oracle ?
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  6. #6
    Membre habitué Avatar de 4rocky4
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 528
    Points : 180
    Points
    180
    Par défaut
    Citation Envoyé par Vincent Rogier Voir le message
    Quel est le provider Oracle que tu utilise en C# ? Celui fournit par défaut ou celui d'Oracle ?
    j'utilise ADO.NET.

    J'ai mis en fichier le test que j'ai effectué pour la récupération de la valeur via GetInt16()

    Donc il faut dans mon programme que je remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Int16 varsmallint = reader.GetInt16(0);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Int16 varsmallint = System.Convert.ToInt16(reader.GetValue(0));
    ?

    En faisant cela, normalement ça marchera pour Oracle et SQL Server.
    Fichiers attachés Fichiers attachés
    "J'glande pas ! Ça compile ..."

    4rocky4
    - Un con qui marche ira plus loin q'un intellectuel assis -

  7. #7
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Citation Envoyé par 4rocky4 Voir le message
    j'utilise ADO.NE
    ca j'ai bien compris mais tu as plusieurs provider possible pour oracle....
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  8. #8
    Membre habitué Avatar de 4rocky4
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 528
    Points : 180
    Points
    180
    Par défaut
    System.Data.Common.DbDataReader est mieux comme réponse ? lol
    "J'glande pas ! Ça compile ..."

    4rocky4
    - Un con qui marche ira plus loin q'un intellectuel assis -

  9. #9
    Membre habitué Avatar de 4rocky4
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 528
    Points : 180
    Points
    180
    Par défaut
    Bon je crois qu'il va falloir que je remplace tout mes GetInt16() et GetInt32() par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.Convert.ToInt16(monReader.GetValue(0));
    System.Convert.ToInt32(monReader.GetValue(0));
    "J'glande pas ! Ça compile ..."

    4rocky4
    - Un con qui marche ira plus loin q'un intellectuel assis -

  10. #10
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Vive ADO

    Mon dieu, quand je vois ce que l'on doit faire en .NET pour récupérer un number dans un short... En C un simple cast (dans ce cas) aurait suffit
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  11. #11
    Membre habitué Avatar de 4rocky4
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 528
    Points : 180
    Points
    180
    Par défaut
    C'est l'horreur ...


    Edit : J'ai fais la conversion. Cela me semble correcte mais j'ai encore des erreurs qui, je pense, ne sont pas dû à ma conversion donc je met "résolu"
    "J'glande pas ! Ça compile ..."

    4rocky4
    - Un con qui marche ira plus loin q'un intellectuel assis -

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

Discussions similaires

  1. Comparaison d'un registre 8 bits avec une variable 32 bits
    Par tupperware dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 15/10/2002, 10h25
  2. Main icon (16 bits)
    Par DR dans le forum C++Builder
    Réponses: 2
    Dernier message: 02/09/2002, 08h23
  3. Cherche l'algo crc 16 bits
    Par icepower dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 21/08/2002, 13h27
  4. Debugger 16-32 bits
    Par Mat dans le forum Assembleur
    Réponses: 4
    Dernier message: 28/06/2002, 11h34
  5. Lire 1 bit d'un fichier en C
    Par Anonymous dans le forum C
    Réponses: 3
    Dernier message: 23/05/2002, 18h31

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