Member 3892343 Ответов: 2

Добавление нескольких параметров в команду SQL с помощью кода


Привет,
Я хочу создать SQL-запрос команды в vb net (используя ADO VS 2015 Community Edition), который я хочу добавить несколько параметров во время выполнения, например. У меня есть поле carnum, которое имеет 5 значений, и я хочу искать записи по этому полю
SELECT * FROM Table_1 WHERE carnum LIKE @c1

теперь я хочу добавить несколько значений carnum во время выполнения, например. с помощью флажка 5 можно выбрать до 5 значений carnum и добавить их в запрос, если установлен флажок 2
SELECT * FROM Table_1 WHERE carnum LIKE @c1 and @c2

Есть ли какой-нибудь способ сделать это?

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

Ничего в коде просто для того, чтобы знать, можно ли это сделать, если я использую оператор if then else или select case of checked checkbox, мне понадобится 55 операторов "else".

NotPolitcallyCorrect

"если это можно сделать", хорошо, тогда да

Member 3892343

Извините, как это можно сделать, если я использую оператор if then else или select case of checked checkbox, мне понадобится 55 операторов "else".

Member 3892343

извините, если я использую оператор if then else или select case of checked checkbox, мне понадобится 55 операторов "else".

F-ES Sitecore

Если у вас есть максимальное число вы можете сделать это так

где (@С1 имеет значение null или carnum как @C1) и (@C2 является null или carnum как @C2) и (@C3 является null или carnum как @С3) ....

Тогда, если вы должны пройти два значения в @С1 и С2 и оставить @С3, @С4 и С5 как null.

Если у вас нет максимума, вы можете просто построить запрос в виде текстовой строки и использовать стандартную конкатинацию строк, чтобы добавить столько операторов "или", сколько вам нужно.

NotPolitcallyCorrect

Извините, это новый и совершенно другой вопрос. Комментарий ответил на ваш вопрос за вас.

Member 3892343

ty

2 Ответов

Рейтинг:
12

CHill60

Мое понимание вашего вопроса заключается в том, что у вас есть набор Checkboxes и от 0 до 5 из них могут быть проверены в любой комбинации.

В идеале вы должны использовать предложение IN -. Проблема в том, что довольно сложно использовать предложение IN с Параметризованным запросом. Вы всегда должны использовать параметризованные запросы вместо конкатенации строк.

Я создал проект с 5 флажками, каждый из которых имел мое значение поиска в качестве Text собственность. Следующее работает с любым количеством флажков

Using conn As New SqlConnection(constring)
	conn.Open()
	Using cmd As New SqlCommand()
		Dim qry As StringBuilder = New StringBuilder("SELECT * FROM Table_1 ")
		Dim whereAdded As Boolean = False
		Dim commaRequired As Boolean = False
		Dim i As Integer = 1

		For Each c As Control In Controls
			If c.GetType() = GetType(CheckBox) Then
				Dim cb As CheckBox = c
				If cb.Checked Then
					If Not whereAdded Then
						qry.Append("WHERE carnum IN(")
						whereAdded = True
					End If
					If commaRequired Then
						qry.Append(",")
					End If
					qry.Append("@c" + i.ToString())
					cmd.Parameters.AddWithValue("@c" + i.ToString(), cb.Text)
					i += 1
					commaRequired = True
				End If
			End If
		Next
		If whereAdded Then
			qry.Append(")")
		End If
		cmd.CommandText = qry.ToString()
		cmd.Connection = conn
		Dim dr As SqlDataReader = cmd.ExecuteReader()
		While (dr.Read())
			Debug.Print(dr.GetString(0))
		End While
	End Using
End Using


Maciej Los

Кэролайн, кажется, ты понимаешь этот вопрос так же, как и я.
Я немного разочарован тем, что вы не указали на мой ответ ;(
5 за старания.

CHill60

Извинения. Я не видел твоего решения. Мое интернет-соединение на данный момент действительно плохое, плюс у сайта были некоторые проблемы с производительностью.
Ты же меня знаешь. .- Я всегда отдаю должное там, где считаю нужным, и вы действительно направили операцию в правильном направлении.

Maciej Los

Кэролайн, это было "случайное замечание". Да, я тебя знаю. Вы человек, который дает кредиты другим участникам, поэтому я решил оставить такой комментарий. В мои намерения не входило обвинять тебя. Извиняюсь...

CHill60

:)

Рейтинг:
1

Maciej Los

Если я правильно вас понял, вы хотите найти строки, которые находятся в списке значений. Итак, вы должны использовать в статье[^] внутри WHERE заявление (см.: "м").

SELECT *
FROM Table_1
WHERE carnum IN (@c1, @c2)


Но если вы хотите найти строки, удовлетворяющие любому из N условий, вы должны построить запрос таким образом:
SELECT *
FROM Table_1
WHERE carnum Like %@c1 OR carnum Like @c2% OR carnum Like %@c3%


CHill60

5 б

Maciej Los

Спасибо, Кэролайн.