簡體   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