Ошибка при фильтрации БД "Невозможно выполнить операцию "Like" над System.Int32 и System.String."
Хочу создать фильтрацию через TextBox
через ФИО и Год, проблема возникает при фильтрации года textBox9
, вот где появляется ошибка:
System.Data.EvaluateException: "Невозможно выполнить операцию "Like" над System.Int32 и System.String.
private void textBox8_TextChanged(object sender, EventArgs e)
{
(dataGridView2.DataSource as DataTable).DefaultView.RowFilter = $"Кытаптын_аты LIKE '%{textBox8.Text}%'";
}
private void textBox9_TextChanged(object sender, EventArgs e)
{
(dataGridView2.DataSource as DataTable).DefaultView.RowFilter = $"Жылы LIKE '%{textBox9.Text}%'";
}
Ответы (1 шт):
https://stackoverflow.com/a/70797877/12888024
Вольный перевод
Свойство
RowFilter
содержит по сути SQL ограничениеWHERE
. ADO.NET поддерживают только небольшой набор SQL синтаксиса, но требование синтаксической корректности SQL всё равно актуально. Так же как вы оборачиваете в двойные кавычки строковый литералstring
в коде, так же требуется оборачивать строки в одинарные кавычки в SQL запросе.
При этом LIKE
не поддерживает работу с числовыми полями таблиц. Поэтому в данном случае можно проверять только на точное совпадение, либо сравнивать логически/математически.
private void textBox9_TextChanged(object sender, EventArgs e)
{
TextBox box = (TextBox)sender;
if (int.TryParse(box.Text, out int number))
{
(dataGridView2.DataSource as DataTable).DefaultView.RowFilter = $"Жылы = '{number}'";
}
}
Здесь допустимы математические операции, "больше", "меньше" и т.д.
Либо преобразовать значение поля в строку
private void textBox9_TextChanged(object sender, EventArgs e)
{
TextBox box = (TextBox)sender;
(dataGridView2.DataSource as DataTable).DefaultView.RowFilter = $"CONVERT(Жылы, 'System.String') LIKE '%{box.Text}%'";
}