En VBScript puede usar el símbolo de y comercial (&) para concatenar cadenas. Prueba esto:
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
Tiene tres cláusulas "y" separadas para agregar a su consulta sql. Las declaraciones condicionales son independientes entre sí, por lo que no debería usar elseif
que es para diferentes opciones dentro de una sola declaración condicional. Es más sencillo verificar si una cadena no está vacía o no if stringname <> ""
que usar len
, (y dudo que sus declaraciones condicionales funcionen porque parece estar usando una letra minúscula "o" donde debería usar un cero)
Es muy fácil cometer errores cuando ensambla consultas SQL como esta. En las pruebas, a menudo vale la pena agregar una línea como Response.Write strSqlData
antes de intentar ejecutarlo para comprobar que la consulta es lo que pretendía
Sin embargo, como han sugerido otros comentarios, su código es vulnerable a un ataque de inyección SQL. URL que contienen ".asp?" casi se puede garantizar que será golpeado por un ataque de tipo ASPROX tarde o temprano. Las consultas parametrizadas son la mejor manera de protegerse contra esto, pero un enfoque rápido si los valores de la cadena de consulta son todos numéricos es usar cint()
- por ejemplo
strSqlData= strSqlData & " and AcademicYear=" & cint(AcademicYear)
Esto arrojará un error de discrepancia de tipo si la cadena de consulta contiene algo más que números, y el script fallará antes de intentar ejecutar su consulta sql.