Проблема кодирования с использованием SQLite и WinForms 2.0 C # - PullRequest
1 голос
/ 31 января 2009

Я занимаюсь разработкой приложения WinForms с использованием .NET 2.0 и пытаюсь использовать SQLite в качестве решения для БД. Моя основная проблема заключается в том, что у меня возникают проблемы с отображением данных из БД в WinForm, когда данные не на английском языке (в моем случае на греческом).

В целях администрирования БД я использую Администратор SQLite , который без проблем возвращает данные на греческом языке. Но когда я загружаю данные в DataGridView в моей форме, я получаю эти страшные квадратные символы «отсутствующих символов».

Для связи с БД я использую решение System.Data.SQLite .

Есть что-то, чего я здесь не хватает? Я искал параметры сортировки по умолчанию в базе данных, но ничего не нашел, поскольку SQLite не поддерживает такие параметры сортировки, как SQL Server (например, COLLATE Greek_CI_AS)

Спасибо

P.S. Я использую SQLite 3 и System.Data.SQLite.dll 1.0.60. Строка подключения для теста: Data Source=test.db;UseUTF8Encoding=True;

Ответы [ 2 ]

2 голосов
/ 31 января 2009

Вы извлекаете строку или байтовый массив из базы данных? Внутренне SQLite использует строки UTF-8 или UTF-16 (в зависимости от того, какой метод использовался для вставки строки в базу данных), что и возвращается при получении строкового значения с использованием sqlite3_column_text.

С другой стороны, если вы запросите большой двоичный объект, он просто вернет базовые байты, которые могут не соответствовать кодировке символов, ожидаемой вашим приложением.

Я не уверен, как провайдер ADO сопоставляется с этими базовыми операциями, но мне кажется, что если ваш текст не возвращается как Unicode, или если приложение обрабатывает его иначе, это может быть где проблема лежит.

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

Редактировать: Пока я думаю об этом, попробуйте открыть базу данных в SQLiteman , чтобы увидеть, есть ли какая-либо разница.

1 голос
/ 31 января 2009

Проблема, скорее всего, была вызвана администратором SQLite. Следуя совету Майка, я также использовал SQLiteman для проверки БД. Когда я запросил образцы данных, которые я вставил в SQLite Administrator, я получил те же символы «недостающих символов», которые я использовал, используя мой код.

Тогда я попробовал обратное. Я создал БД с помощью SQLiteman, добавил несколько строк, и код получил результаты в правильном формате. Затем я добавил строку с моим приложением, и результаты снова были правильными.

Так что, спасибо, Майк, твое предложение мне помогло.

Кроме того, я ни в коем случае не хочу подразумевать, что администратор SQLite не является хорошим приложением. Тем не менее, это может иметь проблемы с конкретным случаем. Еще раз спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...