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

Accès aux données Discussion :

[2.0] Convertir une cle primaire byte[] en string


Sujet :

Accès aux données

  1. #1
    Membre expérimenté
    Avatar de freddyboy
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2003
    Messages
    810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2003
    Messages : 810
    Points : 1 696
    Points
    1 696
    Par défaut [2.0] Convertir une cle primaire byte[] en string
    Bonjour,

    je cherche comment convertir une clé primaire qui est au format tableau de byte (byte[]) en string (si possible).

    Cette clé primaire vient d'une base de données ORACLE (varbinary(16)).

    J'ai besoin de cette clé primaire car je dois créer des objets contenu dans une autre table et qui utilise cette clé primaire comme clé etrangere.

    J'ai donc fait la méthode simple suivante :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    byte[] array; // contient la cle unique d'oracle recuperée avant
    string s;
    foreach (byte b in array)
    {
    char c = Convert.ToChar(b);
    s+= c.ToString();
    }

    Cependant pour une clé donnée j'obtiens des carrés et autres (m/“g»<Cµ¾èfÜþ> pour etre plus precis)...

    Quelqu'un a une idée ?



    @+
    Someday I will be the most powerful Jedi !

    Freddyboy - Blog

  2. #2
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Citation Envoyé par freddyboy
    Quelqu'un a une idée ?
    Ca dépend de l'encodage exemple :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Encoding.Unicode.GetString(LesBytes);
    Mehdi Feki : Modérateur .Net

  3. #3
    Membre expérimenté
    Avatar de freddyboy
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2003
    Messages
    810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2003
    Messages : 810
    Points : 1 696
    Points
    1 696
    Par défaut
    ok merci je me doutais que c'etait une histoire d'encodage.
    Apres quelques recherches, il semble que la classe GuidConverter soit mon ami dans le cas present, par contre je n'arrive pas à m'en servir.

    Je voudrais prendre le tableau de byte, ou autre car je recupere mon GUID sous forme de tableau de byte via un DataReader mais je peux le recuperer sous une autre forme, et le convertir en string.

    Le pire s'est que je ne suis meme pas sur que ma requete avec un GUID sous forme de string va fonctionner.



    @+
    Someday I will be the most powerful Jedi !

    Freddyboy - Blog

  4. #4
    Membre expérimenté
    Avatar de freddyboy
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2003
    Messages
    810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2003
    Messages : 810
    Points : 1 696
    Points
    1 696
    Par défaut
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Encoding.Unicode.GetString(LesBytes);

    J'ai essayé mais cela ne fonctionne pas non plus.

    @+
    Someday I will be the most powerful Jedi !

    Freddyboy - Blog

  5. #5
    Membre actif Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Points : 245
    Points
    245
    Par défaut
    Salut.
    Je te propose une petite methode qui va faire la conversion necessaire
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Text.RegularExpressions;
     
    namespace Conversion
    {
        class Program
        {
            static void Main(string[] args)
            {
                Random r = new Random();
     
                const int MAX = 16;
                byte[] data = new byte[MAX];
                for (int i = 0; i < data.Length; i++)
                {
                    data[i] = (byte)r.Next(byte.MinValue, byte.MaxValue);
                }
     
     
                foreach (byte b in data)
                {
                    Console.Write((char)b);
                }
                Console.WriteLine();
     
                string result = ConvertData(data);
                Console.WriteLine(result);
            }
     
            public static bool IsAlphaNumeric(char symbol)
            {
                Regex regexAlphaNum = new Regex("[^a-zA-Z0-9]");
                return !regexAlphaNum.IsMatch(symbol.ToString());
            }
     
            public static string ConvertData(byte[] data)
            {
                StringBuilder buffer = new StringBuilder();
                char[] symbols = new char[data.Length];
                for (int i = 0; i < symbols.Length; i++)
                {
                    symbols[i] = Convert.ToChar(data[i]);
                    if (IsAlphaNumeric(symbols[i]))
                    {
                        buffer.Append(symbols[i]);
                    }
                    else
                    {
                        buffer.Append((int)symbols[i]);
                    }
                }
                return buffer.ToString();
            }
        }
    }
    Even the biggest journey, starts with a single step.

  6. #6
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Citation Envoyé par freddyboy
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Encoding.Unicode.GetString(LesBytes);

    J'ai essayé mais cela ne fonctionne pas non plus.

    @+

    Comment les bytes ont été formés avant d'être inséré dans la base ?

    Essaie un autre encodage : ASCII par exemple.
    Mehdi Feki : Modérateur .Net

  7. #7
    Membre expérimenté
    Avatar de freddyboy
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2003
    Messages
    810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2003
    Messages : 810
    Points : 1 696
    Points
    1 696
    Par défaut
    Citation Envoyé par mehdi_tn
    Comment les bytes ont été formés avant d'être inséré dans la base ?

    Essaie un autre encodage : ASCII par exemple.
    Je ne sais pas, ce GUID est une clé primaire Oracle donc s'est Oracle qui gere cela.

    scifire, merci, je vais jeter un oeil.

    @+
    Someday I will be the most powerful Jedi !

    Freddyboy - Blog

  8. #8
    Membre expérimenté
    Avatar de freddyboy
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2003
    Messages
    810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2003
    Messages : 810
    Points : 1 696
    Points
    1 696
    Par défaut
    scifire, j'ai testé et cela ne fonctionne pas, enfin pas comme je veux du moins.

    Mon GUID dans la base de données est : 6D2F930667BB3C43B5BEE86610DCFE3E

    Ton application me sort : m471476g18760C181190232f1622025462

    Punaise j'ai pas fini de galérer avec ces histoires.

    du coup de main

    @+
    Someday I will be the most powerful Jedi !

    Freddyboy - Blog

  9. #9
    Membre expérimenté
    Avatar de freddyboy
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2003
    Messages
    810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2003
    Messages : 810
    Points : 1 696
    Points
    1 696
    Par défaut
    j'ai toujours pas resolu mon probleme.
    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Guid aGuid = new Guid(myUniqueId); // byte[]
    string myUniqueIdStringFromatted = aGuid.ToString();
    mais bon guid dans oracle est : 6D2F930667BB3C43B5BEE86610DCFE3E

    et le ToString() me donne : 06932f6d-bb67-433c-b5be-e86610dcfe3e

    Evidemment ce guid ne fonctionne pas.

    Quelqu'un a une idée ?



    @+
    Someday I will be the most powerful Jedi !

    Freddyboy - Blog

  10. #10
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Et tu essayais de caster ton varbinary en varchar lorsque tu fais ton SELECT ?
    Désolé je ne me souviens plus de la syntaxe sql avec Oracle (la fonction doit être cast).

    Par contre, si tu dois utiliser par après ce guid pour faire un select/update/insert/delete... Faudrait voir si le cast fonctionne dans l'autre sens
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  11. #11
    Membre expérimenté
    Avatar de freddyboy
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2003
    Messages
    810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2003
    Messages : 810
    Points : 1 696
    Points
    1 696
    Par défaut
    Citation Envoyé par Goldar
    Et tu essayais de caster ton varbinary en varchar lorsque tu fais ton SELECT ?
    Désolé je ne me souviens plus de la syntaxe sql avec Oracle (la fonction doit être cast).

    Par contre, si tu dois utiliser par après ce guid pour faire un select/update/insert/delete... Faudrait voir si le cast fonctionne dans l'autre sens
    non je n'ai rien essayer de tout cela.
    Je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Guid g = aDataReader.GetGuid(aDataReader.GetOrdinal("unique_id"));
    string s = g.ToString();
    Le probleme s'est que je ne peux pas utiliser de sql spécial pour oracle, je vous explique pas pourquoi cela serait trop long.

    Ce que je comprend pas c'est pourquoi le guid de la base et le guid converti ne donne pas la meme valeur...



    @+
    Someday I will be the most powerful Jedi !

    Freddyboy - Blog

  12. #12
    Nip
    Nip est déconnecté
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    963
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 963
    Points : 1 076
    Points
    1 076
    Par défaut
    T'as essaye la solution de mehdi_tn avec l'encodage en ASCII?

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    byte [] array
    string s;
    System.Text.ASCIIEncoding encodage = new System.Text.ASCIIEncoding();
    s = encodage.GetString(array);

  13. #13
    Membre expérimenté
    Avatar de freddyboy
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2003
    Messages
    810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2003
    Messages : 810
    Points : 1 696
    Points
    1 696
    Par défaut
    oui cela ne fonctionne pas non plus.
    En faite j'utilise des librairies qui sont developpées par ma boite mais aux USA. J'ai demandé à un collegue au states et il se trouve que dans leur api ils ont fait une methode juste pour cela. du coup je vais la tester.



    @+
    Someday I will be the most powerful Jedi !

    Freddyboy - Blog

  14. #14
    Membre confirmé
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Points : 542
    Points
    542
    Par défaut
    Je suis dans le même cas , c'est pour ca que je relance le sujet.
    J'ai un GUID généré par une base Oracle et je le récupère dans mon code .net sous la forme byte[16].
    Si je crée un GUID .net à partir de ce tableau de byte en faisaint
    Guid monGuid = new Guid(monTableaudeByte)

    Je n'obtiens pas la même valeur que celle contenu dans ma base oracle, si quelqu'un a une solution sans passer par des dlls des USA ca serait cool

  15. #15
    Membre confirmé
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Points : 542
    Points
    542
    Par défaut
    Ok j'ai trouvé la solution pour obtenir le même format des deux cotés :

    Coté .net je récupère mon Guid en créant un nouveau Guid à partir du tableau de byte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Guid monGuid = new Guid((byte[])reader.GetValue(0)
    Si je veux le format string de ce Guid je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string monGuid = System.BitConvert.ToString(monGuid.ToByteArray())
    Et là j'obtiens le GUID de oracle mais avec un format différent (il y a des '-' pour délimiter certains caractères)

    Il suffit juste de faire un replace pour virer les - sur le string et le tour est joué

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/04/2007, 12h45
  2. [VB.NET 2.0] Convertir une structure en Byte() ?
    Par arno2000 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/11/2006, 12h38
  3. Réponses: 1
    Dernier message: 11/08/2006, 23h02
  4. comment supprimer une clé primaire d'une table ?
    Par polianita dans le forum Access
    Réponses: 10
    Dernier message: 03/08/2006, 15h34
  5. Réponses: 8
    Dernier message: 26/09/2005, 22h06

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