2016-05-18 8 views
2

我有SQLite.Net的查詢編碼問題。一切正常,如果我只使用SQL字符串中的列名稱,但如果我自己寫SQL,每個特殊字符如ä,ü,ö,ß都不會被正確編碼。 這裏有兩個簡單的例子,一個工作,一個不工作。WPU SQLite.Net.SQLiteConnection.Query編碼問題

public class ass { 
     [PrimaryKey, AutoIncrement] 
     public int _id { get; set; } 
     [MaxLength(255)] 
     public string sortname { get; set; } 
    } 

    dbConn = new SQLiteConnection(new SQLitePlatformWinRT("testpasswort"),DB_PATH); 
    dbConn.CreateTable<ass>(SQLite.Net.Interop.CreateFlags.None); 

    //add a test entry with special chars 
    ass asss = new ass(); 
    asss.sortname = "oe=öae=äszett=ß"; 
    dbConn.Insert(asss); 

    //now select the test entry to an ass object 
    List<ass> getass = dbConn.Table<ass>().ToList<ass>(); 
    //the list is filled and sortname = "oe=öae=äszett=ß" 

    //now fake a object with 
    List<ass> sqlass = dbConn.Query<ass>("SELECT 'oe=öae=äszett=ß' as sortname FROM ass").ToList<ass>(); 
    //the List is filled and sortname = "oe=�ae=�szett=�" 

我知道查詢是無用的,下面的工作:

List<ass> sqlass = dbConn.Query<ass>("SELECT sortname as FROM ass").ToList<ass>(); 

但問題是,該.Query的Funktion有一個編碼的問題,這是不行的:

List<ass> sqlass = dbConn.Query<ass>("SELECT sortname FROM ass WHERE sortname LIKE '%ä%'").ToList<ass>(); 

但是這將工作:

List<ass> sqlass = dbConn.Query<ass>("SELECT sortname FROM ass).ToList<ass>().Where(v => v.sortname.Contains("ä")); 

每當我在sqlcode中有任何特殊字符時它將不起作用,這對我的需求是致命的,因爲我有很多替換(列,查找,替換)語句,如果查找或替換字符串包含任何字符ü,ö,ä[...]

有沒有人知道如何解決這個問題?

+0

你嘗試使用的參數是這樣的'名單 sqlass = dbConn.Query ( 「選擇sortname FROM屁股WHERE sortname樣?」,@ 「A」)ToList ();' – jomsk1e

回答

1

可能的解決方案是使用@params而不是直接字符串請求。並使用UTF-8 encoding編譯指示,您也可以使用它來檢查您現有的數據庫編碼。這個問題的有用的描述可以發現here

+0

謝謝,這工作完善。 – 2red13