我在C#表单应用程序中使用Sqlite作为我的首选数据库,使用http://sqlite.phxsoftware.com/ System.Data.SQLite提供程序。我正在尝试实现一个搜索功能,但它不是很好玩......或者我错过了一些东西。
我使用的简化sql看起来像这样:
SELECT *
FROM Table
WHERE column LIKE @boundParameter ESCAPE '!'
当我运行它时,在带参数的任何排列中(使用?或?001或:boundParameter或@boundParameter),它会给我一个FormatException:“输入字符串的格式不正确。”我无法找到任何说我不能使用LIKE参数的东西。有人知道这个吗?我是否需要以其他方式做到这一点?
答案 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 +“%”;