Member 14000611 Ответов: 1

Запрос параметров для поиска по ключевым словам


Я пытаюсь создать запрос параметров для поиска инвентарных позиций.

Похоже, я сделал что-то не так, так как он возвращает ошибки при запуске "Execute Query" из окна Query builder(Visual studio). Может ли кто - нибудь помочь мне найти эту проблему?

Ниже приведены подробности

Ошибка 1: обнаружены синтаксические ошибки SQL

Ошибка в предложении Where рядом с"@".
Не удается выполнить синтаксический анализ текста запроса

Ошибка 2: ошибка выполнения SQL

Сообщение об ошибке: нет значения для одного или нескольких обязательных параметров

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

SELECT        Products.[Product Name], Products.[Product code], [Brands For Sales].[Brand Name], [Main Group].[Group Name], Category.[Catogory Name], SubCatogory.[SubCatogory Name]
FROM            (((((Products INNER JOIN
                         Category ON Products.[Category-ID] = Category.ID) INNER JOIN
                         [Brands For Sales] ON Products.[Brand Name] = [Brands For Sales].ID) INNER JOIN
                         [Main Group] ON Products.[Group-ID] = [Main Group].ID AND Category.[Group-ID] = [Main Group].ID) INNER JOIN
                         Category Category_1 ON Products.[Category-ID] = Category_1.ID AND [Main Group].ID = Category_1.[Group-ID]) INNER JOIN
                         SubCatogory ON Products.[SubCategory-ID] = SubCatogory.ID AND Category.ID = SubCatogory.[Catogory-ID] AND Category_1.ID = SubCatogory.[Catogory-ID])
WHERE        (Products.[Product Name] LIKE '%' + @Searchbox + '%')

Richard MacCutchan

Похоже, проблема заключается в @Searchbox.

Member 14000611

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

Richard MacCutchan

Скорее всего, потому, что вы пытаетесь смешать конкатенацию строк с параметрами SQL.

Member 14000611

Он не работал даже без конкатенации строк.
Я скопировал видеоурок, который работал в этом видео, но он не работал для меня.

Richard MacCutchan

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

Bryian Tan

может быть, вы можете показать код, где привязывается параметр @Searchbox

1 Ответов

Рейтинг:
0

CHill60

Ваш код может выглядеть примерно так (предупреждение - непроверенный)

Dim sql As String = "SELECT        Products.[Product Name], Products.[Product code], [Brands For Sales].[Brand Name], [Main Group].[Group Name], Category.[Catogory Name], SubCatogory.[SubCatogory Name]
FROM            (((((Products INNER JOIN
                         Category ON Products.[Category-ID] = Category.ID) INNER JOIN
                         [Brands For Sales] ON Products.[Brand Name] = [Brands For Sales].ID) INNER JOIN
                         [Main Group] ON Products.[Group-ID] = [Main Group].ID AND Category.[Group-ID] = [Main Group].ID) INNER JOIN
                         Category Category_1 ON Products.[Category-ID] = Category_1.ID AND [Main Group].ID = Category_1.[Group-ID]) INNER JOIN
                         SubCatogory ON Products.[SubCategory-ID] = SubCatogory.ID AND Category.ID = SubCatogory.[Catogory-ID] AND Category_1.ID = SubCatogory.[Catogory-ID])
WHERE        (Products.[Product Name] LIKE @Searchbox)"
Dim sqlcmd As SqlCommand = yourconnection.CreateCommand()
sqlcmd.CommandText = sql
Затем включите "%" в переменную - обратите внимание, что sql это одна строка, нет никакой конкатенации
sqlcmd.Parameters.AddWithValue("@Searchbox", "%" + searchbox.Text + "%")
В качестве альтернативы, если вы знаете значения, которые будут найдены с помощью предложения LIKE, вы можете построить sql из массива параметров и использовать вместо него предложение IN - см. С помощью SQL "в()" раздела параметризованные запросы - узел корпорации Майкрософт: ASP.NET - ТЭК-советы[^]

Или вы можете передать @Searchbox в качестве параметра хранимой процедуре, сгенерировать некоторый динамический sql и запустить его.

Или (если вы знаете значения) передайте таблицу в SP - see Использование табличных параметров в SQL Server и .NET[^]