I VBScript kan du använda et-tecken (&) för att sammanfoga strängar. Prova detta:
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
Du har tre separata "och"-satser att lägga till i din sql-fråga. De villkorliga uttalandena är oberoende av varandra så du bör inte använda elseif
som är för olika alternativ inom ett enda villkorligt uttalande. Det är enklare att kontrollera om en sträng inte är tom eller inte if stringname <> ""
än att använda len
, (och jag tvivlar på att dina villkorliga uttalanden skulle fungera eftersom du verkar använda en liten bokstav "o" där du ska använda en nolla)
Det är väldigt lätt att göra misstag när du sätter ihop sql-frågor som denna. I tester är det ofta värt att lägga till en rad som Response.Write strSqlData
innan du försöker köra den för att kontrollera att frågan är vad du tänkt dig
Som andra kommentarer har föreslagit är din kod sårbar för en SQL-injektionsattack. Webbadresser som innehåller ".asp?" kan nästan garanterat drabbas av en attack av ASPROX-typ förr eller senare. Parametriserade frågor är det bästa sättet att skydda sig mot detta, men ett snabbt tillvägagångssätt om alla dina frågesträngsvärden är numeriska är att använda cint()
- t.ex.
strSqlData= strSqlData & " and AcademicYear=" & cint(AcademicYear)
Detta kommer att ge ett typfel överensstämmelse om frågesträngen innehåller något annat än siffror, och skriptet kommer att falla över innan det försöker köra din sql-fråga.