我对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中有任何特殊的字符都不起作用,这对我的需求是致命的,因为我有很多替换(列,查找,替换)语句,如果查找或替换字符串它们都失败了包含任何ü,ö,ä[...]
有人知道如何制作这个吗?
答案 0 :(得分:1)
可能的解决方案是使用@params而不是直接字符串请求。并使用UTF-8 encoding编译指示,您也可以使用它来检查现有的数据库编码。可以找到有关此问题的有用说明here。