वीबीस्क्रिप्ट में आप तारों को जोड़ने के लिए एम्परसेंड (&) प्रतीक का उपयोग कर सकते हैं। इसे आजमाएं:
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
आपकी sql क्वेरी में जोड़ने के लिए आपके पास तीन अलग "और" खंड हैं। सशर्त बयान एक दूसरे से स्वतंत्र हैं इसलिए आपको elseif
. का उपयोग नहीं करना चाहिए जो एक सशर्त बयान के भीतर विभिन्न विकल्पों के लिए है। यह जांचना आसान है कि स्ट्रिंग खाली नहीं है या नहीं if stringname <> ""
len
. का उपयोग करने के बजाय , (और मुझे संदेह है कि आपके सशर्त बयान काम करेंगे क्योंकि आप एक छोटे अक्षर "ओ" का उपयोग कर रहे हैं जहां आपको शून्य का उपयोग करना चाहिए)
जब आप इस तरह के sql प्रश्नों को असेंबल कर रहे हों तो गलतियाँ करना बहुत आसान है। परीक्षण में यह अक्सर Response.Write strSqlData
. जैसी पंक्ति जोड़ने लायक होता है इससे पहले कि आप यह जाँचने के लिए इसे निष्पादित करने का प्रयास करें कि क्वेरी वही है जो आप चाहते थे
जैसा कि अन्य टिप्पणियों ने सुझाव दिया है, आपका कोड SQL इंजेक्शन हमले के लिए असुरक्षित है। यूआरएल जिनमें ".asp?" है लगभग जल्दी या बाद में ASPROX प्रकार के हमले की चपेट में आने की गारंटी दी जा सकती है। पैरामीटरयुक्त प्रश्न इससे बचाव का सबसे अच्छा साधन हैं, लेकिन एक त्वरित तरीका यदि आपके क्वेरीस्ट्रिंग मान सभी संख्यात्मक हैं तो cint()
का उपयोग करना है। - जैसे
strSqlData= strSqlData & " and AcademicYear=" & cint(AcademicYear)
यह एक प्रकार की बेमेल त्रुटि को फेंक देगा यदि क्वेरीस्ट्रिंग में संख्याओं के अलावा कुछ भी है, और स्क्रिप्ट आपके sql क्वेरी को निष्पादित करने का प्रयास करने से पहले खत्म हो जाएगी।