System.Data.Sqlite FormatException с использованием параметра с LIKE

Я использую Sqlite в качестве своей базы данных в приложении на C# формах с поставщиком http://sqlite.phxsoftware.com/ System.Data.SQLite. Я пытаюсь реализовать функцию поиска, но она не играет хорошо... или я что-то упускаю.

Упрощенный sql, который я использую, выглядит следующим образом:

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

Когда я запускаю это в любой перестановке с параметром (используя? Или?001 или:boundParameter или @boundParameter), он дает мне исключение FormatException: "Входная строка была не в правильном формате". Я не смог найти ничего, что говорит, что я не могу использовать параметры с LIKE. Кто-нибудь знает что-нибудь об этом? Мне нужно сделать это как-нибудь по-другому?

4 ответа

Я бы порекомендовал попробовать что-то вроде этого:

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

а потом:

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

Parameters.AddWithValue - это способ добавления связанного параметра в SQLite вместо необходимости каждый раз объявлять новый.

@ Нет (извините, пока не могу комментировать)

Стивен Дженнингс прав, вам не нужно указывать значение, которое вы связываете.

Этот программный код выполняет запрос, который включает ЗАМЕНУ ПАРАМЕТРОВ и ФИТИНГ ШАБЛОНА за один шаг. Здесь строковая переменная myNamePattern - это строка, для которой мы хотим найти клиентов, чтобы все возвращенные клиенты включали переменную myNameattern string. У меня была такая же проблема, но я решил ее! Это идеальный способ замены строкового шаблона (который также является параметром) в SQLiteCommand.CommandText:

SQLiteCommand command = conn.CreateCommand (); command.CommandText = "выберите * из клиента, где имя, как @myStringParameter"; command.Parameters.Add("myStringParameter", System.Data.DbType.String).Value = "%"+ myNamePattern+ "%";

"Входная строка была не в правильном формате" не является сообщением об ошибке, возвращаемым любой версией SQLite

Он должен быть возвращен упаковщиком. ТАК... Я собираюсь догадаться, что вы используете провайдер ADO.NET 2.0 с sqlite.phxsoftware.com

Не забудьте указать значение, которое вы привязываете к параметру.

Например, если вы используете

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

тогда _pattern = "'тест'", а не "тест"

Как вы подключаете и добавляете параметры?

Я не очень много использовал 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));
...
Другие вопросы по тегам