Във VBScript можете да използвате символа амперсанд (&) за свързване на низове. Опитайте това:
strSqlData="select * from MyTable where gender='male'"
if AcademicYear <> "" then
strSqlData= strSqlData & " and AcademicYear=" & AcademicYear
end if
if Batch <> "" then
strSqlData= strSqlData & " and Batch=" & Batch
end if
if School <> "" then
strSqlData= strSqlData & " and School=" & School
end if
Имате три отделни клаузи "и", които да добавите към вашата sql заявка. Условните оператори са независими един от друг, така че не трябва да използвате elseif
което е за различни опции в рамките на един условен оператор. По-лесно е да проверите дали даден низ не е празен if stringname <> ""
отколкото да използвате len
, (и се съмнявам, че вашите условни изрази ще работят, защото изглежда, че използвате малка буква "o", където трябва да използвате нула)
Много е лесно да правите грешки, когато сглобявате sql заявки като тази. При тестване често си струва да добавите ред като Response.Write strSqlData
преди да се опитате да го изпълните, за да проверите дали заявката е това, което възнамерявате
Както предполагат други коментари обаче, вашият код е уязвим за атака чрез SQL инжектиране. URL адреси, които съдържат ".asp?" може почти гарантирано да бъде засегнат от атака тип ASPROX рано или късно. Параметризираните заявки са най-доброто средство за предпазване от това, но един бърз подход, ако стойностите на низа на заявката ви са изцяло числови, е да използвате cint()
- например
strSqlData= strSqlData & " and AcademicYear=" & cint(AcademicYear)
Това ще изведе грешка при несъответствие на типа, ако низът на заявката съдържа нещо различно от числа, и скриптът ще падне, преди да се опита да изпълни вашата sql заявка.