我发布的数据包含 Ö 和 Ş 未正确发布到 sqlite。我在调试状态下分享了一小部分代码。
queryString = "INSERT INTO " + LOCALDB_USER_TABLE_NAME +
" (Username, UpdateTime, IpAddr, Synced) VALUES ('" +
userName + "', '" + timestamp + "', '" + IPAddr + "', '" + synced + "')";
_sourceDB.ExecuteNonQuery(queryString);
我在 Visual Studio 中打开即时窗口并简单地输入这些内容。这里我在utf8中添加Ş和Ü字符来手动插入语句。
INSERT INTO adusers (Username, UpdateTime, IpAddr, Synced) VALUES ('CŞŞŞŞŞööööÖÜÜÜb', '2015-11-17T19:16:39.859434200Z', '192.168.0.7', '1')
我在 stackoverflow 中搜索类似的问题并在 i.w. 中尝试:
byte[] bytes = System.Text.Encoding.Default.GetBytes(queryString);
Expression has been evaluated and has no value
queryString = System.Text.Encoding.UTF8.GetString(bytes);
这里是查询字符串在即时窗口中的样子:
INSERT INTO adusers (Username, UpdateTime, IpAddr, Synced) VALUES ('CSSSSS��������b', '2015-11-17T19:16:39.859434200Z', '192.168.0.7', '1')
sqlite studio 中的数据行看起来也一样,所以这就是问题(我可以在 studio 中将 utf8 字符添加到 sqlite 数据库中)。我必须做的事情和查询字符串应该使用 utf8 中的正确字符发布数据 sqlilte。
已经太久了,这个答案是给那些追随它的人的。 例如:
[SQLiteFunction(Name = "ContainsCn", FuncType = FunctionType.Scalar)]
public class FunctionContainsCn:SQLiteFunction
{
public override object Invoke(object[] args)
{
object arg1 = args[0];
object arg2 = args[1];
if(arg1 == null || arg2 == null ) { return false; }
var s1 = arg1.ToString();
var s2 = arg2.ToString();
return s1.Contains(s2);
return base.Invoke(args);
}
}
然后
SQLiteFunction.RegisterFunction(typeof(FunctionContainsCn)); // 注册自定义函数
你可以在sql中使用,比如
select * from table1 where FunctionContainsCn(col1, "哈哈");