Em VBScript você pode usar o símbolo e comercial (&) para concatenar strings. Tente isto:
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
Você tem três cláusulas "e" separadas para anexar à sua consulta sql. As instruções condicionais são independentes umas das outras, então você não deve usar
elseif
que é para diferentes opções dentro de uma única instrução condicional. É mais simples verificar se uma string não está vazia if stringname <> ""
do que usar len
, (e duvido que suas declarações condicionais funcionem porque você parece estar usando uma letra minúscula "o" onde deveria estar usando um zero) É muito fácil cometer erros quando você está montando consultas sql como esta. Em testes, geralmente vale a pena adicionar uma linha como
Response.Write strSqlData
antes de tentar executá-lo para verificar se a consulta é o que você pretendia Como outros comentários sugeriram, porém, seu código é vulnerável a um ataque de injeção de SQL. URLs que contêm ".asp?" pode ser quase garantido ser atingido por um ataque do tipo ASPROX mais cedo ou mais tarde. As consultas parametrizadas são a melhor maneira de se proteger contra isso, mas uma abordagem rápida se os valores de sua querystring forem todos numéricos é usar
cint()
- por exemplo strSqlData= strSqlData & " and AcademicYear=" & cint(AcademicYear)
Isso lançará um erro de incompatibilidade de tipo se a querystring contiver algo diferente de números, e o script cairá antes de tentar executar sua consulta sql.