Member 13353619 Ответов: 2

Как я могу искать данные с помощью 25 текстовых полей без использования оператора or SQL


У меня есть 25 текстовых полей, и мне нужно искать с помощью этих текстовых полей, я пробовал использовать оператор OR, но в конце концов он просто покажет все данные в datagridview. Я не хочу пытаться и оператор, потому что это просто займет у меня сделать сотни возможностей.

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

connection.Open();
SqlDataAdapter da = new SqlDataAdapter("Select ColumnName1,ColumnName2,ColumnName3 from TableName Where ColumnName1 = '" + textBox1.Text + "' AND ColumnName2 = '" + textBox2.Text + "' AND ColumnName3 = '" + textBox3.Text + "'", connection);
SqlDataAdapter da = new SqlDataAdapter("Select ColumnName1,ColumnName2 from TableName Where ColumnName1 = '" + textBox1.Text + "' AND ColumnName3 = '" + textBox2.Text + "'", connection);
SqlDataAdapter da = new SqlDataAdapter("Select ColumnName1 from TableName Where ColumnName1 = '" + textBox1.Text + "'", connection);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource= dt;
connection.Close();




это только для 3 текстовых полей представьте себе 25 текстовых полей :(

Richard MacCutchan

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

Вам также необходимо использовать правильные описательные имена для ваших столбцов и текстовых полей.

2 Ответов

Рейтинг:
2

Thomas Nielsen - getCore

Да, ну, во-первых, google "SQL injection"... затем осознайте, что структура-это запрет

Затем сделайте хранимую процедуру, которая принимает 25 параметров, и постройте свой запрос в зависимости от того, что непосредственно на sql-сервере ... затем, прежде чем передавать значения из текстовых полей в вашу процедуру, проверьте их на наличие escape-символов или чего-то еще, кроме того, что вы ожидаете, в основном, если это просто символы, например, сделайте регулярное выражение, берущее все буквы с отрицательным взглядом на что-то не то или что-то подобное. Вы можете легко централизовать этот код, так как вам не придется делать это дважды :)


Рейтинг:
1

OriginalGriff

Начните с того, что не делайте этого так. Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.

Кроме того, почему вы создаете один и тот же DataAdapter несколько раз? Немного сжимая ваш код для ясности:

SqlDataAdapter da = new SqlDataAdapter(Select1, connection);
SqlDataAdapter da = new SqlDataAdapter(Select2, connection);
SqlDataAdapter da = new SqlDataAdapter(Select3, connection);
DataTable dt = new DataTable();
da.Fill(dt);
Первые два не используются вообще, потому что последующие экземпляры перезаписывают их, и в итоге вы получаете только выбор из окончательного DataAdapter.

Если вы хотите объединить результаты в SQL, вы должны использовать AND и OR: нет волшебной команды для "вот куча текстовых элементов, найдите их где-нибудь в моей БД, хорошо?"


Kornfeld Eliyahu Peter

Существует своего рода магия под названием CONTAINS, которую можно использовать, если у вас включен полнотекстовый поиск...
https://docs.microsoft.com/en-us/sql/t-sql/queries/contains-transact-sql