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

时间:2016-05-18 14:32:26

标签: c# encoding sqlite-net

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

有人知道如何制作这个吗?

1 个答案:

答案 0 :(得分:1)

可能的解决方案是使用@params而不是直接字符串请求。并使用UTF-8 encoding编译指示,您也可以使用它来检查现有的数据库编码。可以找到有关此问题的有用说明here