aaaaaaaaaaa222 Ответов: 3

Поиск с использованием нескольких текстовых полей C# SQL server


У меня есть 20 текстовых полей, созданных для поиска в тысячах записей в базе данных. У меня есть параметризованный поиск, и мне нужна помощь в том, как я могу игнорировать пустое текстовое поле из запроса searcch, который использует оператор AND. Пример выберите имя, местоположение, возраст.. Из tbl1 где имя=@наименование и местонахождение=@местоположения и возраста=@возраст...
УМК.Параметры.AddWithValue ("@name", textboxname.Текст);
УМК.Параметры.AddWithValue ("@location", textboxlocation.Текст);
УМК.Параметры.AddWithValue ("@age", textboxage.Текст);....

Если я искал только по имени, результатов не будет, потому что другие текстовые поля пусты.. Я не могу использовать или или, как мне нужны точные значения из текстовых полей, используемых для поиска. заранее спасибо

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

пробовал использовать

Выберите имя,местоположение, возраст.. Из tbl1 где имя=@наименование и местонахождение=@местоположения и возраста=@возраст...

3 Ответов

Рейтинг:
2

OriginalGriff

Скомпилируйте его вместе.
Вызовите метод и передайте ему stringbuilder, List<SqlParameter & gt;, целочисленный индекс, имя поля, строку текстового поля и значение параметра.
Если текстовое поле пусто, верните индекс без изменений.
В противном случае проверьте индекс. Если он не равен нулю, то добавляет " и " к построителю строк.
Добавьте имя поля, затем "= @P", а затем значение индекса к построителю строк.
Создайте новый SqlParameter с именем "@P " и номером индекса и дайте ему значение. Добавьте это в список.
Увеличьте индекс и верните его.
После того как вы попытались собрать все параметры, у вас есть StringBuilder, содержащий необходимые команды, набор параметров для добавления в объект SqlCommand и количество команд в системе.


aaaaaaaaaaa222

что-то вроде этого? https://stackoverflow.com/questions/41722502/c-sharp-sql-server-searching-all-database-columns-and-populating-datagrid

OriginalGriff

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

Рейтинг:
2

AnvilRanger

Вы также можете подумать о поиске инструментов индексации, таких как Lucene.Сеть и прокатка вашей собственной поисковой страницы. Или даже автономный поисковый сервер, такой как Solr.

Эти продукты фактически будут создавать индексы на основе ваших данных и того, как вы их настраиваете. Если у вас есть 20 полей, которые вам нужно найти, эти продукты действительно могут помочь.

Апач Lucene.Net[^]

Люсинэ.Чистый ультра быстрый поиск MVC и веб-форм сайта =&ГТ; легко![^]

Apache Solr-Особенности[^]


Рейтинг:
1

Patrice T

Вы можете построить критерийную часть запроса на лету, пока сохраняете параметры.
Попробуйте что-нибудь вроде:

criteria="";
if (textbox.text.length != 0)
{
    if (criteria.lentgh != 0)
        criteria += " AND";
    criteria += " name=@name";
    cmd.Parameters.AddWithValue("@name", textbox.Text);
}
...
query= "SELECT name,location,age.. FROM tbl1 WHERE" + criteria;

Это просто принцип, я позволяю вам иметь дело с синтаксисом C#.


aaaaaaaaaaa222

В этом есть смысл, большое вам спасибо. Я постараюсь сделать это на C# и, пожалуйста, продолжайте быть благословением для других! Спасибо.