Trong VBScript, bạn có thể sử dụng ký hiệu và (&) để nối các chuỗi. Hãy thử điều này:
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
Bạn có ba mệnh đề "và" riêng biệt để thêm vào truy vấn sql của mình. Các câu lệnh điều kiện độc lập với nhau, vì vậy bạn không nên sử dụng elseif
dành cho các tùy chọn khác nhau trong một câu lệnh điều kiện duy nhất. Đơn giản hơn để kiểm tra xem một chuỗi có trống hay không if stringname <> ""
so với việc sử dụng len
, (và tôi nghi ngờ các câu lệnh điều kiện của bạn sẽ hoạt động vì bạn có vẻ đang sử dụng chữ cái viết thường "o", nơi bạn nên sử dụng số 0)
Rất dễ mắc lỗi khi bạn đang tập hợp các truy vấn sql như thế này. Trong quá trình thử nghiệm, bạn nên thêm một dòng như Response.Write strSqlData
trước khi bạn cố gắng thực thi nó để kiểm tra xem truy vấn có phải là những gì bạn đang có ý định không
Như các nhận xét khác đã đề xuất, mã của bạn dễ bị tấn công SQL injection. Các url chứa ".asp?" hầu như có thể được đảm bảo sẽ bị tấn công kiểu ASPROX sớm hay muộn. Các truy vấn được tham số là phương tiện tốt nhất để bảo vệ chống lại điều này, nhưng một cách tiếp cận nhanh nếu các giá trị chuỗi truy vấn của bạn đều là số là sử dụng cint()
- ví dụ:
strSqlData= strSqlData & " and AcademicYear=" & cint(AcademicYear)
Điều này sẽ tạo ra lỗi không khớp về kiểu nếu chuỗi truy vấn chứa bất kỳ thứ gì khác ngoài số và tập lệnh sẽ bị đổ trước khi nó cố gắng thực thi truy vấn sql của bạn.