2009-03-11 7 views
13

में एसक्लाइट के साथ एसक्यूएल से बचें मेरे पास एक टेक्स्ट फ़ील्ड है और यह मेरा एसक्यूएल स्टेटमेंट तोड़ रहा है। मैं उस क्षेत्र में सभी वर्णों से कैसे बचूं? मैं सी #सी #

उत्तर

31

में http://sqlite.phxsoftware.com/ साथ SQLite उपयोग कर रहा हूँ आप में के रूप में एक पैरामीटर का उपयोग किया जाना चाहिए:

SQLiteCommand cmd = _connection.CreateCommand(); 
cmd.CommandType = CommandType.Text; 
cmd.CommandText = "SELECT * FROM MyTable WHERE MyColumn = @parameter"; 
cmd.Parameters.Add(new SQLiteParameter("@parameter", textfield)); 
SQLiteDataReader reader = cmd.ExecuteReader(); 

एक parametrised एसक्यूएल का उपयोग करते हुए सभी इनपुट मानों बचने और SQL इंजेक्शन हमले से बचाने में मदद मिलेगी।

+0

अगर मैं एकाधिक पैरामीटर है मैं क्या करूँ? मैं लिखना cmd.CommandText = नहीं" ... @parameter ... @parameter "; cmd.Parameters.Add (...); cmd.Parameters.Add (...); –

+0

हां, वहाँ एक AddRange विधि भी उपलब्ध होनी चाहिए जहां आप एक सरणी पास कर सकते हैं पैरामीटर जो एसक्यूएल स्टेटमेनेट में पैराम से मेल खाते हैं। –

+0

आप पैरामीटर्स को कॉल कर सकते हैं। पैरामीटर को पूछने या प्रयोग करने के लिए कई बार जोड़ें। एड्रेंज जो पैरामीटर की सरणी स्वीकार करता है। – bstoney

0

तुम भी सभी एकल उद्धरण सीमांकक संदेह के साथ एक सिंगल कोट्स (नहीं ") की जगह ले सकता डालें।

sql = sql.Replace("'","''"); 
+2

यह विधि फिर से नहीं है सराहना की, यह अजीब कीड़े का कारण बन सकता है। – Palani

+0

जरूरी नहीं है। यदि आप अपना एसक्यूएल बनाते हैं और अंतिम चरण को बदलते हैं, तो सभी को अच्छा होना चाहिए। समस्याओं के बिना वर्षों तक काम किया। मैं अब एप्लिकेशन ब्लॉक का उपयोग करता हूं, इसलिए इससे कोई फर्क नहीं पड़ता। :) – klkitchens

+0

यह विधि अच्छी है यदि आपको किसी टेक्स्ट फ़ाइल या डंप करने के लिए SQL सुरक्षित बनाने की आवश्यकता है। –