2009-01-31 6 views
1

Je développe une application WinForms en utilisant .NET 2.0 et j'essaie d'utiliser SQLite comme solution DB. Mon problème principal est que j'ai du mal à voir les données de la base de données dans WinForm lorsque les données sont dans une langue autre que l'anglais (dans mon cas, le grec).Problème d'encodage avec SQLite et WinForms 2.0 C#

Pour l'administration de la base de données, j'utilise le SQLite administrator qui n'a aucun problème à renvoyer des données en grec. Mais quand je charge les données dans un DataGridView dans mon formulaire, j'obtiens ces symboles carrés redoutés de "caractère manquant".

Pour communiquer avec le db, j'utilise la solution System.Data.SQLite.

Y a-t-il quelque chose qui me manque ici? Je regardais pour régler le classement par défaut dans la base de données, mais ne suis pas venu avec quoi que ce soit, étant donné que SQLite ne supporte pas les valeurs de classement comme SQL Server (par exemple COLLATE Greek_CI_AS)

Merci

post-scriptum J'utilise SQLite 3 et System.Data.SQLite.dll 1.0.60. La chaîne de connexion pour le test est: Data Source=test.db;UseUTF8Encoding=True;

Répondre

2

Récupérez-vous une chaîne ou un tableau d'octets de la base de données? En interne, SQLite utilise des chaînes UTF-8 ou UTF-16 (en fonction de la méthode utilisée pour insérer la chaîne dans la base de données), ce qui est ce qu'il renvoie lorsque vous obtenez une valeur de chaîne à l'aide de sqlite3_column_text. D'autre part, si vous demandez un blob, il retournera simplement les octets sous-jacents, qui peuvent ne pas correspondre au codage de caractères attendu par votre application. Je ne suis pas sûr comment le fournisseur ADO mappe sur ces opérations sous-jacentes, mais il me semble que si votre texte n'est pas retourné comme unicode, ou il est mais l'application le traite autrement, cela peut être où le problème réside.

http://www.sqlite.org/c3ref/column_blob.html

Edit: Bien que je pense, essayez d'ouvrir votre base de données SQLiteman, pour voir s'il y a une différence.

1

Le problème a très probablement été causé par l'administrateur SQLite. Ayant suivi le conseil de Mike, j'ai également utilisé SQLiteman pour tester la base de données. Lorsque j'ai interrogé les exemples de données que j'avais insérés avec l'administrateur SQLite, j'ai reçu les mêmes symboles "Caractères manquants" que j'ai obtenus en utilisant mon code.

Puis j'ai essayé le contraire. J'ai créé une base de données en utilisant SQLiteman, ajouté quelques lignes, et le code a obtenu les résultats dans le bon format. Puis j'ai ajouté une ligne avec mon application, et les résultats étaient de nouveau appropriés.

Alors, merci Mike, votre suggestion m'a aidé.

En outre, je ne veux pas insinuer que l'administrateur SQLite n'est pas une bonne application. Cependant, il peut avoir un problème avec le cas spécifique. Merci encore