Dans VBScript, vous pouvez utiliser le symbole esperluette (&) pour concaténer des chaînes. Essayez ceci :
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
Vous avez trois clauses "et" distinctes à ajouter à votre requête sql. Les instructions conditionnelles sont indépendantes les unes des autres, vous ne devriez donc pas utiliser elseif
qui est pour différentes options dans une seule instruction conditionnelle. Il est plus simple de vérifier si une chaîne n'est pas vide ou non if stringname <> ""
que d'utiliser len
, (et je doute que vos instructions conditionnelles fonctionnent car vous semblez utiliser une lettre minuscule "o" là où vous devriez utiliser un zéro)
Il est très facile de faire des erreurs lorsque vous assemblez des requêtes sql comme celle-ci. Lors des tests, il vaut souvent la peine d'ajouter une ligne comme Response.Write strSqlData
avant d'essayer de l'exécuter pour vérifier que la requête correspond à ce que vous souhaitiez
Comme d'autres commentaires l'ont suggéré, votre code est vulnérable à une attaque par injection SQL. Les URL contenant ".asp?" peut presque être garanti d'être touché par une attaque de type ASPROX tôt ou tard. Les requêtes paramétrées sont le meilleur moyen de se prémunir contre cela, mais une approche rapide si vos valeurs de chaîne de requête sont toutes numériques consiste à utiliser cint()
- par exemple
strSqlData= strSqlData & " and AcademicYear=" & cint(AcademicYear)
Cela lancera une erreur d'incompatibilité de type si la chaîne de requête contient autre chose que des nombres, et le script tombera avant de tenter d'exécuter votre requête sql.