W VBScript możesz użyć symbolu ampersand (&) do łączenia ciągów. Spróbuj tego:
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
Masz trzy oddzielne klauzule „i”, które należy dołączyć do zapytania sql. Instrukcje warunkowe są od siebie niezależne, więc nie powinieneś używać elseif
czyli dla różnych opcji w ramach jednej instrukcji warunkowej. Łatwiej jest sprawdzić, czy ciąg nie jest pusty if stringname <> ""
niż używanie len
, (i wątpię, aby twoje instrukcje warunkowe działały, ponieważ wydaje się, że używasz małej litery „o”, gdzie powinieneś używać zera)
Bardzo łatwo jest popełnić błędy podczas składania takich zapytań sql. W testach często warto dodać linię typu Response.Write strSqlData
zanim spróbujesz go wykonać, aby sprawdzić, czy zapytanie jest tym, czego zamierzałeś
Jak sugerują inne komentarze, Twój kod jest podatny na atak typu SQL injection. Adresy URL zawierające „.asp?” prędzej czy później można prawie zagwarantować, że zostanie trafiony przez atak typu ASPROX. Zapytania parametryczne są najlepszym sposobem zabezpieczenia się przed tym, ale jednym szybkim podejściem, jeśli wszystkie wartości ciągu zapytania są numeryczne, jest użycie cint()
- np.
strSqlData= strSqlData & " and AcademicYear=" & cint(AcademicYear)
Spowoduje to zgłoszenie błędu niezgodności typu, jeśli ciąg zapytania zawiera cokolwiek innego niż liczby, a skrypt przewróci się, zanim spróbuje wykonać zapytanie sql.