I VBScript kan du bruge og-tegnet (&)-symbolet til at sammenkæde strenge. Prøv dette:
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 separate "og"-klausuler, der skal tilføjes til din sql-forespørgsel. De betingede udsagn er uafhængige af hinanden, så du bør ikke bruge elseif
som er for forskellige muligheder inden for en enkelt betinget erklæring. Det er nemmere at kontrollere, om en streng ikke er tom if stringname <> ""
end at bruge len
, (og jeg tvivler på, at dine betingede udsagn ville fungere, fordi du ser ud til at bruge et lille bogstav "o", hvor du skal bruge et nul)
Det er meget nemt at lave fejl, når du samler sql-forespørgsler som denne. I test er det ofte værd at tilføje en linje som Response.Write strSqlData
før du prøver at udføre den for at kontrollere, at forespørgslen er, hvad du havde til hensigt
Som andre kommentarer dog har foreslået, er din kode sårbar over for et SQL-injektionsangreb. Webadresser, der indeholder ".asp?" kan næsten garanteres at blive ramt af et angreb af typen ASPROX før eller siden. Parametriserede forespørgsler er det bedste middel til at beskytte sig mod dette, men en hurtig tilgang, hvis dine forespørgselsstrengværdier alle er numeriske, er at bruge cint()
- f.eks.
strSqlData= strSqlData & " and AcademicYear=" & cint(AcademicYear)
Dette vil give en type mismatch-fejl, hvis forespørgselsstrengen indeholder andet end tal, og scriptet vil falde om, før det forsøger at udføre din sql-forespørgsel.