Ошибка при фильтрации БД "Невозможно выполнить операцию "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 шт):

Автор решения: aepot

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}%'";
}
→ Ссылка