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

Connexion aux bases de données Firebird Discussion :

.NET Data Provider (FirebirdClient)


Sujet :

Connexion aux bases de données Firebird

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut .NET Data Provider (FirebirdClient)
    Salut à tous,
    Cela fait deux jours que j'ai un problème pour récupérer des enregistrements de type chaîne, avec des accents, et triés dans mon application .NET.

    Je me suis donc penché dans un premier temps sur les chararcter set et collate. Jusqu'à maintenant même en appliquant les méthodes que j'ai pu voir sur le net, mes tris ne fonctionnaient pas (je pense avoir essayé tout ce qui est possible, à partir de isql ou de IBQuery, mais ca ne marchait pas !). J'ai fini par tester IBEasy+ avec lequel ca marche niquel en précisant à la création de la base, connexion à celle-ci et création des champs le character set et le collate! J'obtiens donc dans IBEasy+ mes enregistrements, triés comme il faut.

    A partir de mon appli .NET, la requête non triée est retournée parfaitement, parcontre dès que j'ajoute un order by avec ou sans collate fr_fr, l'appli se bloque (aucune exception n'est lancée !).
    J'imagine que cela vient des jeux de caractères ou des string en .NET, mais je ne vois pas comment faire !

    J'ai configuré ma connexion/ma requête de la manière suivante en C# :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    FbConnectionStringBuilder sb = new FbConnectionStringBuilder(@"User=SYSDBA;Password=masterkey;Database=""" + Application.StartupPath + @"\test.FDB"";ServerType = 1;");
    sb.Charset = "ISO8859_1";
    myConnection = new FbConnection(sb.ToString());
    myConnection.Open();
    FbCommand com = new FbCommand("select * from t order by t_name;", myConnection); 
    /* Avec ou sans collate FR_FR après le order by t_name */
                com.Parameters.Add("Charset", "ISO8859_1");
    FbDataAdapter dataA = new FbDataAdapter(com);
    dataA.Fill(dataS);
    myConnection.Close();
    Le programme se bloque au moment de remplir le dataSet (dataA.Fill(dataS)).
    Auriez-vous une idée de ce qui pourrait provoquer cela?

    Je vous remercie d'avance
    Grég
    PS: peut être ce poste aura t'il plus sa place dans la partie .NET du forum?

  2. #2
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    normalement si ton champ a été créé avec un charset et un collate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE ... t_name VARCHAR(x) CHARACTER SET ISO8859_1 COLLATE FR_FR
    , c'est ceux ci qui seront utilisés par défaut par un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from t order by t_name
    pas besoin d'ajouter quoique soit d'autre
    mais tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from t order by t_name COLLATE FR_FR
    ou même jouer avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from t order by t_name COLLATE FR_CA
    voir : http://blog.developpez.com/index.php...&c=1&tb=1&pb=1

    s'il y a un pb c'est du coté de .Net qu'il faut chercher et à mon avis le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     com.Parameters.ADD("Charset", "ISO8859_1");
    est de trop, mais tu dois pouvoir spécifier ton jeu de caractères dans ta chaîne de connexion, ceci dit je ne cause pas .Net
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci de ta réponse,
    En effet la derniere ligne est en trop (je l'avais rajouté dans un moment de grand désespoir )

    J'ai repris les choses depuis le début en précisant le character set par défaut lors de la création de la base et les collates de chaque champ lors des créations des tables, mais plus directement dans mes requêtes comme tu me l'as proécisé et ca fonctionne !

    Merci encore de ton aide

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

Discussions similaires

  1. [Sybase] Utiliser entity avec le ADO.Net data provider de Sybase
    Par MacReiben dans le forum Entity Framework
    Réponses: 4
    Dernier message: 06/11/2013, 17h58
  2. Réponses: 3
    Dernier message: 16/01/2012, 11h11
  3. Data Provider for .NET et Visual Studio 2008 ?
    Par Alex01 dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 05/05/2011, 11h01
  4. FireBird et ADO.NET Data Provider
    Par markk dans le forum Connexion aux bases de données
    Réponses: 3
    Dernier message: 16/03/2007, 09h56
  5. Réponses: 1
    Dernier message: 04/06/2006, 00h18

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