में एसक्लाइट के साथ एसक्यूएल से बचें मेरे पास एक टेक्स्ट फ़ील्ड है और यह मेरा एसक्यूएल स्टेटमेंट तोड़ रहा है। मैं उस क्षेत्र में सभी वर्णों से कैसे बचूं? मैं सी #सी #
सी #
उत्तर
में 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 इंजेक्शन हमले से बचाने में मदद मिलेगी।
तुम भी सभी एकल उद्धरण सीमांकक संदेह के साथ एक सिंगल कोट्स (नहीं ") की जगह ले सकता डालें।
sql = sql.Replace("'","''");
यह विधि फिर से नहीं है सराहना की, यह अजीब कीड़े का कारण बन सकता है। – Palani
जरूरी नहीं है। यदि आप अपना एसक्यूएल बनाते हैं और अंतिम चरण को बदलते हैं, तो सभी को अच्छा होना चाहिए। समस्याओं के बिना वर्षों तक काम किया। मैं अब एप्लिकेशन ब्लॉक का उपयोग करता हूं, इसलिए इससे कोई फर्क नहीं पड़ता। :) – klkitchens
यह विधि अच्छी है यदि आपको किसी टेक्स्ट फ़ाइल या डंप करने के लिए SQL सुरक्षित बनाने की आवश्यकता है। –
अगर मैं एकाधिक पैरामीटर है मैं क्या करूँ? मैं लिखना cmd.CommandText = नहीं" ... @parameter ... @parameter "; cmd.Parameters.Add (...); cmd.Parameters.Add (...); –
हां, वहाँ एक AddRange विधि भी उपलब्ध होनी चाहिए जहां आप एक सरणी पास कर सकते हैं पैरामीटर जो एसक्यूएल स्टेटमेनेट में पैराम से मेल खाते हैं। –
आप पैरामीटर्स को कॉल कर सकते हैं। पैरामीटर को पूछने या प्रयोग करने के लिए कई बार जोड़ें। एड्रेंज जो पैरामीटर की सरणी स्वीकार करता है। – bstoney