Ve VBScriptu můžete ke zřetězení řetězců použít symbol ampersand (&). Zkuste toto:
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
K dotazu SQL máte tři samostatné klauzule „a“. Podmíněné příkazy jsou na sobě nezávislé, takže byste neměli používat elseif
což je pro různé možnosti v rámci jednoho podmíněného příkazu. Je jednodušší zkontrolovat, zda řetězec není prázdný if stringname <> ""
než pomocí len
, (a pochybuji, že by vaše podmíněné příkazy fungovaly, protože se zdá, že používáte malé písmeno "o", kde byste měli používat nulu)
Je velmi snadné dělat chyby, když takto sestavujete SQL dotazy. Při testování se často vyplatí přidat řádek jako Response.Write strSqlData
než se jej pokusíte provést, abyste zkontrolovali, zda je dotaz tím, co jste zamýšleli
Jak však naznačovaly další komentáře, váš kód je zranitelný vůči útoku SQL injection. Adresy URL, které obsahují ".asp?" lze téměř zaručit, že bude dříve nebo později zasažen útokem typu ASPROX. Parametrizované dotazy jsou nejlepším prostředkem, jak se tomu bránit, ale jedním rychlým přístupem, pokud jsou všechny hodnoty řetězce dotazů číselné, je použít cint()
- např.
strSqlData= strSqlData & " and AcademicYear=" & cint(AcademicYear)
To způsobí chybu nesouladu typu, pokud řetězec dotazu obsahuje něco jiného než čísla, a skript se převrhne, než se pokusí provést váš dotaz SQL.