System.Data.Sqlite FormatException с использованием параметра с LIKE - PullRequest
0 голосов
/ 22 марта 2009

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

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

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

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

Ответы [ 4 ]

2 голосов
/ 16 апреля 2009

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

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

и затем:

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

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

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

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

0 голосов
/ 13 мая 2009

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

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

0 голосов
/ 16 апреля 2009

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

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

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

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

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

затем _pattern = "'test'" , а не "test"

0 голосов
/ 22 марта 2009

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

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