繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM