使用带LIKE的参数的System.Data.Sqlite FormatException

时间:2009-03-21 23:11:23

标签: c# sql sqlite system.data.sqlite phxsoftware

我在C#表单应用程序中使用Sqlite作为我的首选数据库,使用http://sqlite.phxsoftware.com/ System.Data.SQLite提供程序。我正在尝试实现一个搜索功能,但它不是很好玩......或者我错过了一些东西。

我使用的简化sql看起来像这样:

SELECT *
FROM Table
WHERE column LIKE @boundParameter ESCAPE '!'

当我运行它时,在带参数的任何排列中(使用?或?001或:boundParameter或@boundParameter),它会给我一个FormatException:“输入字符串的格式不正确。”我无法找到任何说我不能使用LIKE参数的东西。有人知道这个吗?我是否需要以其他方式做到这一点?

4 个答案:

答案 0 :(得分:2)

我建议尝试这样的事情:

"SELECT * FROM [Table] WHERE [column] LIKE @boundParameter ESCAPE @escape";

然后:

command.Parameters.AddWithValue("@boundParameter", parameter));
command.Parameters.AddWithValue("@escape", "!");

Parameters.AddWithValue是添加绑定参数的SQLite方式,而不是每次都必须声明一个新参数。

@Noah(对不起,暂不公开评论)

Stephen Jennings是对的,你不必引用你所约束的价值。

答案 1 :(得分:0)

如何连接和添加参数?

我没有使用过SQLite,但以下内容应该有效;

SQLiteCommand command = _yourConnection.CreateCommand();
command.CommandType = CommandType.Text;
command.CommandText = "SELECT * FROM Table WHERE column LIKE @boundParameter";
command.Parameters.Add(new SQLiteParameter("@boundParameter", _yourSearchCriteria));
...

答案 2 :(得分:0)

“输入字符串格式不正确”不是任何版本的SQLite

返回的错误消息

必须由包装器返回。所以......我猜你正在使用sqlite.phxsoftware.com上的ADO.NET 2.0提供程序

您必须记住引用您绑定到参数的值。

例如,如果您使用

command.Parameters.Add(new SQLiteParameter("@boundParameter", _pattern));

然后_pattern = “'测试'”而不是“测试”

答案 3 :(得分:0)

此程序代码执行查询,其中包括PARAMETER SUBSTITUTION和PATTERN FITTING。这里,字符串变量myNamePattern是我们想要找到客户的字符串,因此所有返回的客户都将包含变量myNameattern字符串。我有同样的问题,但我解决了!这是将字符串模式(也是参数)替换为SQLiteCommand.CommandText的完美方式:

SQLiteCommand command = conn.CreateCommand();                 command.CommandText =“select * from Customer where name like @myStringParameter”;                 command.Parameters.Add(“myStringParameter”,System.Data.DbType.String).Value =“%”+ myNamePattern +“%”;