[英]System.Data.Sqlite FormatException using a parameter with LIKE
I'm using Sqlite as my database of choice in a C# forms app, with http://sqlite.phxsoftware.com/ System.Data.SQLite provider. 我正在尝试实现搜索 function,但它不是很好......或者我错过了一些东西。
我正在使用的简化 sql 如下所示:
SELECT *
FROM Table
WHERE column LIKE @boundParameter ESCAPE '!'
当我运行它时,在任何带有参数的排列中(使用?或?001 或:boundParameter 或 @boundParameter),它给了我一个 FormatException:“输入字符串的格式不正确。” 我找不到任何说我不能在 LIKE 中使用参数的东西。 有人知道吗? 我需要以其他方式吗?
我建议尝试这样的事情:
"SELECT * FROM [Table] WHERE [column] LIKE @boundParameter ESCAPE @escape";
接着:
command.Parameters.AddWithValue("@boundParameter", parameter));
command.Parameters.AddWithValue("@escape", "!");
Parameters.AddWithValue 是 SQLite 添加绑定参数的方式,而不必每次都声明一个新参数。
@Noah(对不起,还不能评论)
斯蒂芬詹宁斯是对的,你不必引用你所绑定的价值。
如何连接和添加参数?
我没有经常使用 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));
...
“输入字符串的格式不正确”不是 SQLite 的任何版本返回的错误消息
它必须由包装器返回。 所以...我猜你正在使用 sqlite.phxsoftware.com 的 ADO.NET 2.0 Provider
您必须记住引用您绑定到参数的值。
例如,如果您使用
command.Parameters.Add(new SQLiteParameter("@boundParameter", _pattern));
然后 _pattern = "'test'"而不是"test"
该程序代码执行一个查询,其中包括一个步骤中的参数替换和模式拟合。 这里,字符串变量 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+ "%";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.