Я искал и искал ответ для этого, и я не могу его найти. У меня есть проверочный список, в котором пользователь будет выбирать проблемы, которые они испытывают с помощью своего компьютера. В отмеченном списке вы увидите такие вещи, как ... Медленный, Вирусы, Плохой жесткий диск ... и на основе того, что они выбирают, я расскажу им примерную стоимость ремонта. В настоящее время это, как я строю мой запрос:Создание динамического SQL-запроса из VB.NET
Dim mIssues As String = ""
For i = 0 To lstIssues.CheckedItemsCount - 1
If mIssues = "" Then
mIssues = String.Format("IssueName = '{0}'", lstIssues.CheckedItems(i))
Else
mIssues = String.Format("{0} OR IssueName = '{1}'", mIssues, lstIssues.CheckedItems(i))
End If
Next
Приведенный выше код будет выглядеть, чтобы увидеть, сколько проблем они выбрали. Если они выбрали только одну проблему, она вернет такую строку: IssueName = 'What they they they selected'. Если они выбрали более одной проблемы, она вернет строку, такую как: IssueName = 'What they they they selected' ИЛИ IssueName = 'Второй выбор'. Поэтому в основном я добавлю OR между всеми выборами, если они выберут более одной проблемы. Я делаю это, чтобы динамически строить предложение where, которое было в моем запросе.
Вот мой запрос:
Dim mySQL As String = "SELECT IssueID, IssueTypeID, IssueName, IssueDescription, " _
& "CustomerID, IndividualCost, GroupCost, Active, ChargeType " _
& "FROM (SELECT IssueID, IssueTypeID, IssueName, IssueDescription, " _
& "CustomerID, IndividualCost, GroupCost, Active, ChargeType " _
& "FROM(cfg_Issues) " _
& "WHERE " & mIssues & " " _
& "GROUP BY IssueID, IssueTypeID, IssueName, IssueDescription, CustomerID, " _
& "IndividualCost, GroupCost, Active) " _
& "ORDER BY IndividualCost DESC, GroupCost ASC;"
Как вы можете видеть мой, где положение исходит из первой части кода. Мой вопрос в том, есть ли лучший способ сделать это ??? Я знаю, что должен быть лучший способ создать динамический запрос предложения where, и я хотел бы посмотреть, как это сделать. Спасибо за любые рекомендации, которые вы можете мне помочь.
Сначала прочитайте информацию о параматтизированных запросах, таких как [это] (http://www.blakepell.com/Main/BlogEntry.aspx?EntryID=054ce25a-1410-445c-807a-cc10bc20502d). Вы могли бы использовать предложение 'IN()' вместо того, чтобы делать много «a ИЛИ b» и т. Д., Немного сложнее сохранить параматизацию, но не [невозможно] (http://stackoverflow.com/questions/303149/parameterized- queries-with-like-in-conditions) –
Что вы делаете прямо сейчас, если уязвимы для SQL-инъекций. Можно было бы обмануть ваше приложение, заменив произвольный текст на запрос, что позволит мне выполнить любой код sql в вашей базе данных, который я хочу. –
Является ли динамический SQL вариантом ... Я могу показать вам, как это сделать. – logixologist