Я начал дурачиться с SQLite и Dapper в проекте Unity и довольно быстро наткнулся на мою первую проблему.Я хочу иметь возможность заменить определенное выражение в запросе переменными (как в условии WHERE), например, чтобы отфильтровать список строк с записями, содержащими определенную строку в определенном столбце.
В моем примеребаза данных содержит имя и фамилию, а также несколько других значений.Теперь я хочу прочитать все строки с именем «Ли».Это прекрасно работает, если я просто ввожу это вручную в запросе или если я использую параметр и устанавливаю значение параметра в Lee.Но если я попытаюсь установить значение параметра для определенной строковой переменной (например, из поля ввода текста), оно не будет работать.
public void Read(string searchTerm)
{
Debug.Log("Started searching for: " + searchTerm);
SqliteConnection dbcon = new SqliteConnection(connection);
dbcon.Open();
var results = dbcon.Query<TestSubject>("SELECT * FROM TestTable WHERE first_name LIKE :a", new {a = searchTerm});
foreach (TestSubject d in results)
{
Debug.Log("First Name: " + d.first_name.ToString());
Debug.Log("Last Name: " + d.last_name.ToString());
Debug.Log("Age: " + d.age.ToString());
}
dbcon.Close();
}
Как упоминалось ранее, если я использую {a = "Lee "}, я получаю результаты, но если я использую приведенный выше код, где searchTerm =" Lee ", я не получаю никаких результатов.
Я попробовал другой синтаксис, даже посмотрел в dapper (что не помогло с моей проблемой, но облегчило обработку результатов).Я делаю что-то не так или это просто невозможно с SQLite?
РЕДАКТИРОВАТЬ: вероятно, я должен упомянуть, что строка searchTerm происходит из поля ввода текста, и функция Read (...) срабатывает при нажатиикнопка «поиск».Смутно помню, что раньше у меня были проблемы с сгенерированными пользователем строками, которые были реализованы в коде, но это должно отличаться, поскольку оно выполняется только после того, как строка уже установлена, верно?
EDIT2: я попробовал что-то другое сейчас.Я получил всю таблицу из запроса и попытался отфильтровать результаты с помощью условного выражения foreach.К сожалению, это ведет себя так же, как и раньше - если я использую «Lee» вместо searchTerm, это работает, если я использую searchTerm, это не так.Однако это показывает, что проблема, скорее всего, связана не с SQLite, а с чем-то другим.
var results = dbcon.Query<TestSubject>("SELECT * FROM TestTable");
foreach (TestSubject d in results)
{
if (d.first_name.Contains(searchTerm))
{
Debug.Log("First Name: " + d.first_name.ToString());
Debug.Log("Last Name: " + d.last_name.ToString());
Debug.Log("Age: " + d.age.ToString());
}
}