#c# #sql #sql-server #sql-like
#c# #sql #sql-сервер #sql-подобное
Вопрос:
Похоже, что использование Like требует некоторого точного форматирования, о котором я не знаю. Это код:
private void DoFilter()
{
using (connection = new SqlConnection(connectionString))
using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Customers WHERE CompanyName = @filter '%'", connection))
{
adapter.SelectCommand.Parameters.AddWithValue("@filter", txtFilter.Text.Trim());
DataTable TCustomers = new DataTable();
adapter.Fill(TCustomers);
lstCustomers.DisplayMember = "CompanyName";
lstCustomers.ValueMember = "Id";
lstCustomers.DataSource = TCustomers;
}
}
Код не выдает никакой ошибки. Оно просто оставляет поле списка (lstCustomers) пустым. (txtFilter — это текстовое поле, в котором находится строка фильтра).
Комментарии:
1. Для реальной работы like вам нужен оператор like .
2. В дополнение к
LIKE
, избегайте использованияAddWithValue
. Используйте типы параметров строгого типа с максимальной длиной строки для повышения производительности и содействия повторному использованию кэша.
Ответ №1:
используйте like operator
вместо =
SELECT * FROM Customers WHERE CompanyName like @filter '%'"
Ответ №2:
Вы используете не LIKE
оператор, вы используете =
operator .
Это должно быть:
using (SqlDataAdapter adapter = new SqlDataAdapter(
"SELECT * FROM Customers WHERE CompanyName LIKE @filter '%'", connection))
То, как вы его написали, SQL будет соответствовать точной строке с %
в конце, и, следовательно, вы не получите никаких результатов.
Ответ №3:
‘Like’ следует использовать как (ВЫБЕРИТЕ * ИЗ списка клиентов, ГДЕ название компании ПОХОЖЕ НА @filter ‘%’):
private void DoFilter()
{
using (connection = new SqlConnection(connectionString))
using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Customers WHERE CompanyName LIKE @filter '%'", connection))
{
adapter.SelectCommand.Parameters.AddWithValue("@filter", txtFilter.Text.Trim());
DataTable TCustomers = new DataTable();
adapter.Fill(TCustomers);
lstCustomers.DisplayMember = "CompanyName";
lstCustomers.ValueMember = "Id";
lstCustomers.DataSource = TCustomers;
}
}