In VBScript kunt u het en-teken (&) gebruiken om strings samen te voegen. Probeer dit:
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
U hebt drie afzonderlijke "en"-clausules om aan uw SQL-query toe te voegen. De voorwaardelijke instructies zijn onafhankelijk van elkaar, dus u moet elseif
. niet gebruiken dat is voor verschillende opties binnen een enkele voorwaardelijke instructie. Het is eenvoudiger om te controleren of een string niet leeg is if stringname <> ""
dan het gebruik van len
, (en ik betwijfel of je voorwaardelijke uitspraken zouden werken omdat je een kleine letter "o" lijkt te gebruiken waar je een nul zou moeten gebruiken)
Het is heel gemakkelijk om fouten te maken bij het samenstellen van SQL-query's zoals deze. Bij het testen is het vaak de moeite waard om een regel toe te voegen zoals Response.Write strSqlData
voordat u het probeert uit te voeren om te controleren of de zoekopdracht is wat u bedoelde
Zoals andere opmerkingen echter hebben gesuggereerd, is uw code kwetsbaar voor een SQL-injectie-aanval. URL's die ".asp?" bevatten kan bijna gegarandeerd worden geraakt door een ASPROX-achtige aanval, vroeg of laat. Query's met parameters zijn de beste manier om u hiertegen te beschermen, maar een snelle aanpak als uw querystring-waarden allemaal numeriek zijn, is om cint()
te gebruiken. - bijv.
strSqlData= strSqlData & " and AcademicYear=" & cint(AcademicYear)
Dit geeft een type mismatch-fout als de querystring iets anders dan getallen bevat, en het script zal omvallen voordat het probeert uw sql-query uit te voeren.