In VBScript können Sie das kaufmännische Und-Symbol (&) verwenden, um Zeichenfolgen zu verketten. Versuchen Sie Folgendes:
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
Sie haben drei separate "and"-Klauseln, die Sie an Ihre SQL-Abfrage anhängen können. Die Bedingungsanweisungen sind voneinander unabhängig, daher sollten Sie elseif
nicht verwenden was für verschiedene Optionen innerhalb einer einzigen bedingten Anweisung gilt. Es ist einfacher zu prüfen, ob ein String nicht leer ist if stringname <> ""
als mit len
, (und ich bezweifle, dass Ihre bedingten Anweisungen funktionieren würden, da Sie anscheinend einen Kleinbuchstaben "o" verwenden, wo Sie eine Null verwenden sollten)
Es ist sehr einfach, Fehler zu machen, wenn Sie solche SQL-Abfragen zusammenstellen. Beim Testen lohnt es sich oft, eine Zeile wie Response.Write strSqlData
hinzuzufügen bevor Sie versuchen, sie auszuführen, um zu überprüfen, ob die Abfrage Ihren Absichten entspricht
Wie andere Kommentare jedoch andeuten, ist Ihr Code anfällig für einen SQL-Injection-Angriff. URLs, die ".asp?" früher oder später fast garantiert von einem Angriff vom Typ ASPROX getroffen werden. Parametrisierte Abfragen sind das beste Mittel, sich davor zu schützen, aber ein schneller Ansatz, wenn Ihre Querystring-Werte alle numerisch sind, ist die Verwendung von cint()
- zB
strSqlData= strSqlData & " and AcademicYear=" & cint(AcademicYear)
Dadurch wird ein Typkonfliktfehler ausgelöst, wenn die Abfragezeichenfolge etwas anderes als Zahlen enthält, und das Skript wird umfallen, bevor es versucht, Ihre SQL-Abfrage auszuführen.