2012-09-10 91 views
3

我希望將我的Visual Studio C#代碼與unicode字符串插入到SQLite數據庫中有所幫助。將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管理員)的字符串看起來是這樣的: áA A±A作爲一個測試,我可以複製&將字符串直接粘貼到數據庫使用SQLite管理員和字符串被保存,隨後可以查看確定。

我試過切換「UseUTF16Encoding = True;」真/假 - 沒有區別。

任何想法我做錯了。

+0

嘗試用上面的C#插入一行,然後用SQLite Administrator插入一行。然後用C#和各種編碼讀取它們,並看看結果是什麼(我猜SQLite管理員使用C#默認無法識別的編碼) – Thymine

回答

0

您可以使用此代碼

byte[] encod = Encoding.Default.GetBytes(testStr); 
string result = Encoding.UTF8.GetString(encod); 
myParameters.AddWithValue("@name", result); 
+0

非常感謝Aghilas的輸入,但是你的建議會產生字符串ï在分貝中。 我曾嘗試過類似的解決方案,但沒有成功。 – JohnHk

+0

嘗試此解決方案,但與'Encoding.Unicode'? (這是UTF-16) – Thymine

+0

謝謝你,但作爲一個實驗我已經嘗試了所有這些編碼此解決方案:Encoding.UTF8 Encoding.Unicode Encoding.UTF32 Encoding.BigEndianUnicode Encoding.UTF7 Encoding.ASCII其中沒有給預期的結果。 – JohnHk

1

這個問題竟然是用我所用,以查看SQLite的管理員應用程序的問題,嘗試/檢查DB /數據。似乎這是這個應用程序,當我的代碼插入時不會正確顯示字符。奇怪的是,如果您使用SQLite管理員應用程序直接添加測試文本(通過複製&將測試字符串粘貼到表格/字段中),它會顯示,隨後保存&查看確定。無論如何,現在使用SourceForge SQLite數據庫瀏覽器來檢查我的代碼是否正確寫入,並且所有內容都按順序排列

非常感謝任何花時間發表評論的人,希望這對別人有所幫助。

+1

[SQLite Studio](http://sourceforge.net/projects/sqlitestudio/) – Barton