Строки Unicode в базу данных SQLite

Мне нужна помощь с моим кодом Visual Studio C# при вставке строк Unicode в базу данных SQLite.

Ниже приведен мой тестовый код для записи тестовой строки в базу данных:

         string testStr = "á Á ñ ç é á";

         SQLiteConnection mydataConnection = new SQLiteConnection();  // setup new sql connection obj
         try
         {
             ////                    SQLite DB
             mydataConnection.ConnectionString =
             "Data Source=C:\\Users\\John\\Desktop\\location.db; Version=3; UseUTF16Encoding=True;Synchronous=Normal;New=False"; // set up the connection string

             mydataConnection.Open();  // open the connection to the db

             SQLiteCommand myCmd = new SQLiteCommand();   // create a new command object
             myCmd.Connection = mydataConnection;   // whats its connected to, see above connection string


             SQLiteParameterCollection myParameters = myCmd.Parameters; // good pratice to use parameters to pass data to db
             myParameters.AddWithValue("@name", testStr);  //
             myCmd.CommandText = "INSERT INTO location (name) VALUES (@name)";
             myCmd.ExecuteNonQuery();
         }
         catch (SQLiteException d)
         {
             string myerror = "Database Error" + d;
             MessageBox.Show(myerror);
         }
    finally  // good pratice to close db connection in a finally so exceptions dont leave open.
         {
             mydataConnection.Close();
         } 

Когда я просматриваю базу данных/таблицу (используя SQLite Administrator), строка выглядит так: á à ñ ç é á

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

Я попытался переключить «UseUTF16Encoding=True;» Верно/Ложно - без разницы.

Любые идеи, что я делаю неправильно.


person JohnHk    schedule 10.09.2012    source источник
comment
Попробуйте вставить строку с помощью C#, как указано выше, а затем вставьте ее с помощью администратора SQLite. Затем прочитайте оба из них с С# с различными кодировками и посмотрите, какие там результаты (я предполагаю, что администратор SQLite использует кодировку, которую С# не распознает по умолчанию)   -  person Thymine    schedule 11.09.2012


Ответы (2)


Эта проблема оказалась проблемой с приложением администратора SQLite, которое я использовал для просмотра/проверки базы данных/данных. Кажется, это было приложение, которое неправильно отображало символы при вставке моего кода. Как ни странно, если вы использовали приложение администратора SQLite для непосредственного добавления тестового текста (путем копирования и вставки тестовой строки в таблицу/поле), он отобразится, сохранится и впоследствии отобразится ОК. Во всяком случае, теперь я использую SourceForge SQLite Database Browser, чтобы проверить, что мой код пишет правильно, и все кажется в порядке.

Большое спасибо всем, кто нашел время, чтобы оставить комментарий, надеюсь, что это поможет кому-то еще.

person JohnHk    schedule 11.09.2012

Вы можете попробовать с этим кодом

byte[] encod = Encoding.Default.GetBytes(testStr );
string result = Encoding.UTF8.GetString(encod);
myParameters.AddWithValue("@name", result);
person Aghilas Yakoub    schedule 10.09.2012
comment
Большое спасибо Aghilas за ваш вклад, но ваше предложение приводит к строке � � � � � � в БД. Я пробовал подобные решения, как это раньше, но безуспешно. - person JohnHk; 11.09.2012
comment
Попробуйте это решение, но с Encoding.Unicode? (это UTF16) - person Thymine; 11.09.2012
comment
Спасибо, но в качестве эксперимента я попробовал это решение со всеми этими кодировками: Encoding.UTF8 Encoding.Unicode Encoding.UTF32 Encoding.BigEndianUnicode Encoding.UTF7 Encoding.ASCII Ни одна из них не дает желаемого результата. - person JohnHk; 11.09.2012