In VBScript puoi usare il simbolo e commerciale (&) per concatenare le stringhe. Prova questo:
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
Hai tre clausole "e" separate da aggiungere alla tua query sql. Le istruzioni condizionali sono indipendenti l'una dall'altra, quindi non dovresti usare elseif
che è per diverse opzioni all'interno di una singola istruzione condizionale. È più semplice controllare se una stringa non è vuota if stringname <> ""
rispetto all'utilizzo di len
, (e dubito che le tue affermazioni condizionali funzionino perché sembra che tu stia utilizzando una lettera minuscola "o" dove dovresti usare uno zero)
È molto facile commettere errori quando si assemblano query sql come questa. Nei test spesso vale la pena aggiungere una riga come Response.Write strSqlData
prima di provare ad eseguirlo per verificare che la query sia quella che intendevi
Tuttavia, come suggerito da altri commenti, il tuo codice è vulnerabile a un attacco SQL injection. URL che contengono ".asp?" può quasi essere garantito che prima o poi venga colpito da un attacco di tipo ASPROX. Le query parametrizzate sono il mezzo migliore per proteggersi da questo, ma un approccio rapido se i valori della stringa di query sono tutti numerici consiste nell'usare cint()
- es.
strSqlData= strSqlData & " and AcademicYear=" & cint(AcademicYear)
Ciò genererà un errore di mancata corrispondenza del tipo se la querystring contiene qualcosa di diverso dai numeri e lo script cadrà prima che tenti di eseguire la query sql.