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 étrange caractère spécial


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Août 2006
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 160
    Par défaut Problème étrange caractère spécial
    Bonjour à tous

    Bon j'ai un joli souci trés étrange.
    je récupère une donnée depuis une base SQL Serveur , cette donnée SQL Serveur l'affichage sous forme de 3 points comme ceci '...' dans la fenêtre graphique.

    dans mon code j'utilises un SqlDataReader et je récupères la valeur (les 3 points) comme ceci :
    string valeur = dr.GetString(2).ToString() ;

    le problème est que le code avec .lenght() me dit que le caractère récupéré fait 1 de longueur et quand j'affiche via C# dans une log , ça affiche "... "
    ça doit être un cracatère spécial non ??

    Car en essayant insérer en base ça me dit valeur NULL non autorisé car y'a une contrainte sur la colonne , mais pourtant ce caractère spécial '...'
    n'est pas NULL ??


    Voilà si quelqu'un a déjà rencontré ce problème par hazard , toute aide sera la
    bienvenue à bras ouverts

  2. #2
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Effectivement, ce caractère spécial existe '…' et il fait bien 1 de longueur.

    Il n'est donc pas NULL, la contrainte sur ta colonne doit être particulière ou alors il s'agit d'une autre colonne.
    Aurais-tu un bout de code à nous montrer ?

  3. #3
    Membre très actif
    Inscrit en
    Août 2006
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 160
    Par défaut
    merci skalp ,

    mais en fait le caractère spécial je récupère on m'a dit les 3 petits points de
    longueur 1 '...' est le caractère spécial avec code ASCII 133

    et quand j'essaies l'insérer en base SQL Serveur SqlDataReader
    avec le code suivant ça plante car il dit le caractère est NULL :
    c'est peut être la base SQL Serveur en fait qui ne réussit pas incorporer
    le caractère ??

    Je vais insérer la chaine de longueur 3 comme ceci '...'
    car on m'a dit y'a qu'à faire comme ça vu que le caractère je lis est déjà anormal !!

    Sinon mon code de lecture dans une base et insertion dans une autre :


    Je parcours le resultSet :

    ...
    ArrayList listeRef = new ArrayList();
    ArrayList ligne;
    while (dr.Read())
    {
    ligne = new ArrayList(4) ;
    ligne.Add(dr.GetInt32(0)) ;
    ligne.Add(dr.GetInt32(1)) ;
    ligne.Add(dr.GetString(2).ToString()) ;
    --> c'est ce paramètre lu qui ramène '...' de longueur 1
    }
    ...

    quand je fais l'écriture :

    ...
    db.DBParamValue("@CODE_REF_FR", ((string) temp[2]).ToString());
    db.DBExecNonQuery();

    ça plante et me dit il ne peut insérer NULL.

    Donc je crois vraiment faut se méfier des caractères spéciaux , mais si qq à uen solution pour vraiment insérer le caractère spécial '...'
    chui preneur

  4. #4
    Membre très actif
    Inscrit en
    Août 2006
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 160
    Par défaut
    En fait est ce que quelqu'un sait comment
    récupérer la valeur décimale ou int ou sous forme String
    du caractère spécial 133 ('...') de longueur 1 ?

    car j'ai essayé récupérer la valeur décimale du caractère et ça marche pas :
    me renvoie toujours -1

    if( temp[2].ToString().Length == 1 )
    {
    double codeASCII = char.GetNumericValue( temp[2].ToString(),0) ;
    Log.trace("----------*******------------- CODE TYPE DE CAR {0} ", codeASCII );
    }

    Ca me ramène tjs -1 si la longueur du caractère est 1 ?
    Bon je dois être bien nul !

    Est ce que quelqu'un a une solution pour récupérer la valeur du code ASCII d'un caractère d'une chaine de caractères avec longueur = 1 ?

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    en réalité quand bien meme ce caractère "spécial" qui n'est pas spécial au passage, ferait 2, 3 ou 4 octets, il t'indiquerait TOUJOURS 1 caractère... Unicode vaincra... lol

    faut pas oublié qu'un char est un caractère unicode donc stocké sur 1 ou plusieurs octets selon le caractère.
    SQL Server surtout 2005 gère ce paradoxe de meme facon... (oui là c pas la joie surtout que d'un SQL à l'autre il gere pas la chose de la meme facon)

    Ensuite dit toi également que ton application, et SQL n'utilise probablement, pardon surement pas la meme page de code, de facon strictement indépendante de windows, qui pour une fois est inocent.

    j'ai déjà eu un problème similaire que je n'ai toujours pas pu résoudre à cause de ces problème de codage due aux charsets différents qu'on arrive pas à faire coincider...

    Quoi qu'il en soit dit toi que if( temp[2].ToString().Length == 1 ) n'a rien avoir avec ce que SQL te renverra après un LEN sur la meme chaine... Toujours à cause des charsets. ton appli gere tout en unicode...
    SQL Fait ce qu'il veut quand il veut la dessus et surtout ce qui l'arrange...

  6. #6
    Membre très actif
    Inscrit en
    Août 2006
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 160
    Par défaut
    Merci pour l'info cinemania

    Bon ok , donc je veais voir si sous C# , je peux faire qq chose avec les bytes
    du char ???

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

Discussions similaires

  1. problème insertion caractère spécial bdd
    Par cecile38 dans le forum Requêtes
    Réponses: 7
    Dernier message: 30/12/2010, 21h58
  2. Problème caractère spécial
    Par Kernald dans le forum C
    Réponses: 14
    Dernier message: 27/10/2008, 15h17
  3. Réponses: 4
    Dernier message: 31/03/2008, 17h33
  4. [XML] Problème de caractère spécial
    Par webrider dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 15/11/2007, 22h48
  5. [DOM][PHP] Problème d'insertion de caractère spécial
    Par Oscar Hiboux dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 09/01/2007, 16h25

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