WPU SQLite.Net.SQLiteConnection.Query 编码问题

WPU SQLite.Net.SQLiteConnection.Query encoding issue

SQLite.Net 的查询存在编码问题。如果我只使用 SQL 字符串中的列名,一切正常,但如果我自己编写 SQL,则每个特殊字符,如 ä、ü、ö、ß 都不会被正确编码。 这里有两个简单的例子,一个有效,一个无效。

   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 函数有编码问题,这将不起作用:

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 中有任何特殊字符时它都不起作用,这对我的需求来说是致命的,因为我有很多替换(列、查找、替换)语句,如果查找或替换字符串包含任何 ü,ö,ä [...]

有人知道怎么解决吗?

一个可能的解决方案是使用@params 而不是直接的字符串请求。并使用 UTF-8 encoding pragma, which you can also use to check your existing database encoding. A helpful description for this issue can be found here.