2015-09-08 3 views
0

Я пытаюсь создать инструкцию LIKE SQL в vbscript с использованием параметризованного SQL.инструкция LIKE с использованием параметризованного SQL в vbscript

Текст команды прошел вдоль линии

SET NOCOUNT ON; 
DECLARE @pname as nvarchar(50); 
SELECT @pname = ?; 
SELECT * 
FROM tblProject 
WHERE projName LIKE @pname 

И я конкатенации% на каждой стороне строки, я, проходящей через, как PNAME. Если я изменю LIKE на a = и удалю% s, тогда он отлично работает. И если я запустил заявление напрямую и заменил @pname с '% searchterm%' он отлично работает. Любая помощь приветствуется.

Edit: VBScript:

Set rsAnswers = Server.CreateObject("ADODB.Recordset") 
Set cmd = server.createobject("ADODB.Command") 
cmd.CommandText = mySQL 
cmd.CommandType = 1 
cmd.CommandTimeout = 900 
cmd.ActiveConnection = svrPerformanceConnectionset prm = cmd.CreateParameter("@pname", 129, 1, 50, thisProjName) 
cmd.Parameters.Append prm 
rsAnswers.CursorLocation = 3 
rsAnswers.Open cmd, , 0, 1 

(thisProjName получает строку из формы)

Спасибо, Тима

+0

он должен работать с любым специальным символом внутри '@ pname', кроме'% ' – wiretext

+1

Вы должны отправить _all_ код vbscript. Что вы видите, если проследить его с помощью SQL Profiler? –

+0

@ Nick.McDermaid Я добавил больше vbscript, которые могут быть релевантными. Вся страница составляет> 1000 строк и содержит конфиденциальную информацию. Я надеюсь, что то, что я разместил, будет достаточно :) Я взял этот код от кого-то еще, и я все еще очень новичок в vbscript. – TimothyF

ответ

0

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

решение состоит в перемещении конкатенации % из параметра:

SET NOCOUNT ON; 
SELECT * 
FROM tblProject 
WHERE projName LIKE '%' + @pname + '%'; 

уведомления недостающей инициализации декларации & параметра: inizialization и значение присваиваний выполняется слоя двигатель VBScript и доступ к данным при создании связанных объектов в скрипте.

+0

Спасибо @Paolo. Но я все еще не могу заставить его работать. Код, который вы указали, отлично работает в db, но не на моей странице asp. Я, очевидно, не могу поместить в запрос «текст для поиска» в запросе, потому что это передаваемый параметр. Так командный текст выглядит так: \t SET NOCOUNT ON; \t DECLARE [at] pname как nvarchar (50); \t SELECT [at] pname =?; \t SELECT * \t ОТ tblProject \t WHERE projName LIKE '%' + [at] pname + '%'; И затем «текст для поиска» передается объекту ADO. \t set prm = cmd.CreateParameter ("[at] pname", 129, 1, 50, thisProjName) \t cmd.Parameters.Append prm – TimothyF

+0

см. Мое редактирование. так как вы сначала не публиковали код vb, я предположил, что sql был отредактирован для проведения теста. – Paolo

+0

Когда я удаляю объявление из sql, я получаю ошибку «объявить скалярную переменную».Я не объявляю это правильно в своем vbscript? set prm = cmd.CreateParameter ("[at] pname", 129, 1, 50, thisProjName) cmd.Parameters.Append prm – TimothyF

0

После многих попыток, я обнаружил, что проблема была в типе данных, который я объявлял своим параметром. Я не уверен, почему именно, но используя adVarChar (200), а не adChar (129), оператор LIKE работал.

Спасибо всем, кто ответил и прокомментировал!