Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有西里尔字母编码的SQLite错误_C#_Sqlite_Xamarin.forms_Portable Class Library - Fatal编程技术网

C# 带有西里尔字母编码的SQLite错误

C# 带有西里尔字母编码的SQLite错误,c#,sqlite,xamarin.forms,portable-class-library,C#,Sqlite,Xamarin.forms,Portable Class Library,我正在使用Xamarin SQLite.NET PCL包。我还有一个拥有一百万条记录的数据库 我的源数据库上的编码是UTF8。为了获得最佳性能,我选择了FTS引擎。除了使用西里尔字母编码的文本外,所有内容都可以正常工作 例如,以下简单查询: "SELECT name FROM customers WHERE name MATCH '"+filter+"*' LIMIT 50"; 其中,filter是带值的字符串常量。该值取决于用户将从键盘输入的内容。(就像动态搜索) 所以问题是,当过滤器包含西

我正在使用Xamarin SQLite.NET PCL包。我还有一个拥有一百万条记录的数据库

我的源数据库上的编码是UTF8。为了获得最佳性能,我选择了FTS引擎。除了使用西里尔字母编码的文本外,所有内容都可以正常工作

例如,以下简单查询:

"SELECT name FROM customers WHERE name MATCH '"+filter+"*' LIMIT 50";
其中,
filter
是带值的字符串常量。该值取决于用户将从键盘输入的内容。(就像动态搜索)

所以问题是,当过滤器包含西里尔字母值时,我得到一个SQLite异常:

SQLite.Net.SQLiteException:靠近“”:语法错误

我尝试这样做:(将我的字符串查询编码为UTF-8)

但结果是一样的


有什么建议吗?我能做些什么?

现在您肯定找到了一些解决方案,但对于其他人来说,这就是使用SQLite.Net PCL查询参数时的情况:

string query = "SELECT name FROM customers WHERE name MATCH @param1 LIMIT 50";
string param = "'your unicode characters'";
conn.execute(query,param);
如果查询中有更多参数(例如@param1、@param2),请使用逗号将其分隔,如下所示:

string param = "'your unicode characters','your second parameter'";

到目前为止,您肯定找到了一些解决方案,但对于其他人来说,使用SQLite.Net PCL进行查询时,参数应该是这样的:

string query = "SELECT name FROM customers WHERE name MATCH @param1 LIMIT 50";
string param = "'your unicode characters'";
conn.execute(query,param);
如果查询中有更多参数(例如@param1、@param2),请使用逗号将其分隔,如下所示:

string param = "'your unicode characters','your second parameter'";

您不应该使用字符串连接来生成查询。你用参数化查询尝试过吗?@RonBeyer我用SQLiteCommand\u command=\u Connection.CreateCommand(query)尝试过_command.ExecuteQuery();但问题并没有解决,结果是一样的!这不是参数化查询,参数化查询使用占位符作为值,您可以使用类似于
\u command.Parameters.AddWithValue(“@filter”,filter)
的内容。Google C#参数化查询。@RonBeyer是的,我理解您的意思,但这些“_command.Parameters”在我当前的框架(SQLite.Net PCL)中不存在,或者我没有看到。好的,谢谢…但是为什么用拉丁语单词都很好:)?不要尝试重新编码任何字符串;当需要在UTF-16和UTF-8之间进行转换时,DB驱动程序会自动进行转换。您不应该使用字符串连接来生成查询。你用参数化查询尝试过吗?@RonBeyer我用SQLiteCommand\u command=\u Connection.CreateCommand(query)尝试过_command.ExecuteQuery();但问题并没有解决,结果是一样的!这不是参数化查询,参数化查询使用占位符作为值,您可以使用类似于
\u command.Parameters.AddWithValue(“@filter”,filter)
的内容。Google C#参数化查询。@RonBeyer是的,我理解您的意思,但这些“_command.Parameters”在我当前的框架(SQLite.Net PCL)中不存在,或者我没有看到。好的,谢谢…但是为什么用拉丁语单词都很好:)?不要尝试重新编码任何字符串;当需要在UTF-16和UTF-8之间进行转换时,DB驱动程序会自动进行转换。