поиск с помощью нескольких текстовых полей windows form c#

#c# #sql-server #windows-forms-designer

#c# #sql-сервер #windows-forms-designer

Вопрос:

 public void filter()  
{  
    using (SqlConnection sqlconn = new SqlConnection(@"Data Source=DESKTOP-IIBSL6N;Initial Catalog=sales_management;Integrated Security=True"))  
    {  
         SqlDataAdapter sqlad = new SqlDataAdapter("select * From Customer", sqlconn);  
         DataTable dtbl = new DataTable();  
         sqlad.Fill(dtbl);  
         DataView dv = dtbl.DefaultView;  
         dv.RowFilter = string.Format("Name like '%{0}%' and Address like '%{0}% and  office_number like '"   searchoffice.Text   "%'and phone_number like '"   searchphone.Text   "%' and acount_name like '%{0}%'", searchname.Text,searchaddress.Text,searchoffice.Text,searchphone.Text,searchaccountname.Text);  
            customergrid.DataSource = dv.ToTable();  
            dtbl.DefaultView.Sort = "[Name] DESC";  
    }  
}  
  

Когда я запускаю этот метод в textbox.textchange() -EventHandler, я получаю следующее исключение:

 The expression contains an invalid string constant: '
  

Пожалуйста, помогите мне исправить исключение.

Ответ №1:

Похоже, что в строке вашего запроса отсутствовал один пробел рядом с office_number like '" searchoffice.Text "%' and phone_number , также отсутствовал один ‘-символ и строка.Формат — несоответствие количества параметров.

Итак, попробуйте следующее:

 public void filter()  
    {  
        using (SqlConnection sqlconn = new SqlConnection(@"Data Source=DESKTOP-IIBSL6N;Initial Catalog=sales_management;Integrated Security=True"))  
        { 
            SqlDataAdapter sqlad = new SqlDataAdapter("select * From Customer", sqlconn);  
            DataTable dtbl = new DataTable();  
            sqlad.Fill(dtbl);  
            DataView dv = dtbl.DefaultView;  
            dv.RowFilter = string.Format("Name like '%{0}%' and Address like ‘%{1}%’ and  office_number like '"   searchoffice.Text   "%' and phone_number like '"   searchphone.Text   "%' and acount_name like '%{0}%'", searchname.Text,searchaddress.Text);  
            customergrid.DataSource = dv.ToTable();  
            dtbl.DefaultView.Sort = "[Name] DESC";  
        }  
    } 
  

Комментарии:

1. Кажется, что также отсутствовал какой-то символ ‘, проверьте обновленную версию?

2. Также было несоответствие строки. Количество параметров формата и индексы. Будет чище иметь только параметры формата {0},{1} и т.д. И не смешивать с конкатенацией встроенных строк..

3. произошла еще одна ошибка: не удается выполнить операцию ‘Like’ в системе. Десятичная система. Строка.

4. Теперь вам нужно проверить типы данных полей и выполнить необходимые преобразования перед выполнением фильтрации. Когда TextBox.Text-values являются строками, тогда вы должны использовать decimal.Parse и т.д. Перед поиском..