Member 14898617 Ответов: 1

"Невозможно выполнить операцию "как" над system.single и system.string".


я создаю приложение win form , используя базу данных access в качестве источника данных, и в кнопке поиска моей winform у меня есть этот код"
private void searchAccessDatabase()
        {
            if (string.IsNullOrEmpty(KeywordTextBox.Text.Trim()))
            {
                Refreshdata();
                return;
            }
            string strkeyword = KeywordTextBox.Text.Trim().ToString();

            StringBuilder sb = new StringBuilder();
            sb.AppendFormat("(Convert(ID,'System.String') LIKE '" + "{0}" + "')", strkeyword);
            sb.AppendFormat("OR (Customer_Name LIKE '*" + "{0}" + "*')", strkeyword);
            sb.AppendFormat("OR (Complaint_Number LIKE '*" + "{0}" + "*')", strkeyword);
            sb.AppendFormat("(Convert(Size,'System.String') LIKE '" + "{0}" + "')", strkeyword);
            sb.AppendFormat("OR (Material_Number LIKE '*" + "{0}" + "*')", strkeyword);
            sb.AppendFormat("OR (Nature_Of_Problem LIKE '*" + "{0}" + "*')", strkeyword);
            sb.AppendFormat("OR (Spool_Type LIKE '*" + "{0}" + "*')", strkeyword);
            string strFilter = sb.ToString();
           material_Return_DataBindingSource.Filter = strFilter;

            if (material_Return_DataBindingSource.Count != 0)
            {
                dataGridView1.DataSource = material_Return_DataBindingSource;
            }
            else
            {
                MessageBox.Show("No Records Found", "Search Result", MessageBoxButtons.OK,
                    MessageBoxIcon.Exclamation);

                Refreshdata();
                return;
            }
        }

Но во время работы появляется следующая ошибка: "не удается выполнить операцию "как" в системе.Одиночный и системный.Строка.'

Я знаю, что ошибка связана с типом формата ячеек и типом поиска, который я использую, но я не могу их исправить, так как я все еще учусь на этом : кто-нибудь, пожалуйста, поправьте меня, где я ошибаюсь.

Что я уже пробовал:

Это примерная таблица данных , которая поможет вам увидеть примерные данные, которые я ввожу в таблицу, с помощью которой я хочу выполнить поиск

ID		10
Returned_Date		23-Mar-20
Customer_Name		XXXX
Complaint_Number		C20-02
Spool_Number		QF18087829
Size		330
12_NC		Q123456
Material_Number		12345P
DOP		12-03-2020
Qty_Sent_Grams		1.371000051
Qty_Sent_Meter		1.371000051
Qty_Returned_Grams		0.305000007
Qty_Returned_Meter		0.305000007
Difference_Qty_Grams		0
Difference_Qty_Meters		0
Nature_Of_Problem		wwwww
Type _of_material		EPS
Spool_Type		S200(ABS)
Remarks		wwwww

Sandeep Mewara

Я не уверен, думаю, что это не должно быть в одинарных кавычках: 'System.String'

Sandeep Mewara

Кстати, я бы использовал String.format() для удобства чтения здесь за счет производительности.

GenJerDan

Как бы вы хотели работать над номером? 3-это как 13? Или 4-это как 3, только немного больше?
В любом случае, проверьте CAST и CONVERT, превратите число в строку и сделайте сравнение с недавно преобразованной строкой.

1 Ответов

Рейтинг:
2

Sandeep Mewara

Думаю, это не должно быть в одинарных кавычках: 'System.String'

Кроме того, можете ли вы убедиться, что strFilter выглядит так, как ожидалось?
Конечно же следующие исправления:
1. не пропущены ли пробелы между всеми условиями или?
2. Отсутствует или в соответствии:

sb.AppendFormat("(Convert(Size, System.String) LIKE '" + "{0} " + "')", strkeyword);


Еще одна вещь, вы уверены, что хотите добавить '*' к поисковым словам с помощью LIKE. Или это будет "%" ? (ниже код не имеет этого изменения)

Попробуйте ниже:
string strkeyword = KeywordTextBox.Text.Trim().ToString();

StringBuilder sb = new StringBuilder();
sb.AppendFormat("(Convert(ID, System.String) LIKE '" + "{0}" + "') ", strkeyword);
sb.AppendFormat("OR (Customer_Name LIKE '*" + "{0}" + "*') ", strkeyword);
sb.AppendFormat("OR (Complaint_Number LIKE '*" + "{0}" + "*') ", strkeyword);
sb.AppendFormat("OR (Convert(Size, System.String) LIKE '" + "{0} " + "')", strkeyword);
sb.AppendFormat("OR (Material_Number LIKE '*" + "{0}" + "*') ", strkeyword);
sb.AppendFormat("OR (Nature_Of_Problem LIKE '*" + "{0}" + "*') ", strkeyword);
sb.AppendFormat("OR (Spool_Type LIKE '*" + "{0}" + "*')", strkeyword);
string strFilter = sb.ToString();
material_Return_DataBindingSource.Filter = strFilter;

Ссылка: Объектом bindingsource.Свойство Фильтра (System.Окна.Формы) | Microsoft Docs[^]


Sandeep Mewara

CodeProject выдает ошибку... не уверен, что это было опубликовано.

Member 14898617

Большое вам спасибо за ваш ответ , я добавил недостающее или , но поскольку я новичок , у меня есть сомнения : если поле содержит как число , текст, так и символ like = S200(ABS), как мы должны написать оператор like?

Sandeep Mewara

Не могли бы вы уточнить? Что такое данные и что вы хотите сделать с ними в качестве поиска?

пример: данные-это "S200(ABC)". Теперь пользователь может поставить 200 или ABC, оба должны вернуть эти данные. Так ведь?

Member 14898617

Именно так, сэр ..Спасибо за понимание ... очень сожалею о моем позднем ответе.

Sandeep Mewara

Я уже поделился этим тоже в своем ответе. Изменить * к %, как ключевые слова и смотрите
Например: "OR (Customer_Name LIKE '%" + "{0}" + "%') "

Member 14898617

Большое вам спасибо, сэр, я постараюсь .