2010-01-07 2 views
7

मुझे पता है कि मैं पैरामीटर का उपयोग कर सकता हूं, लेकिन स्ट्रिंग अनुक्रमों से बचने का सही तरीका क्या है? क्वेरी इस तरह हो सकता है: लेकिन उस के बारे में क्या:एसक्यूएल प्रश्नों में मूल्यों से बचने (एसक्यूएल कनेक्टर के साथ सी #)

"INSERT INTO records (ReferenceID,Name,Note,Author) VALUES ('" + ID+ "','" + addlevel.textBox1.Text + "','"+addlevel.textBox2_note.Text+ "','"+Program.Username+"')"; 

मैं कर रहा हूँ केवल उत्सुक, सिर्फ जानना चाहता :)

संपादित करना चाहते हैं? + स्ट्रिंग "सही तरीके से पैरामीटर का उपयोग करने के लिए है .... पैरामीटर यहां नहीं किया जा सकता

+0

पहचानकर्ता को परिभाषित करते समय (जैसे तालिका का नाम), यह बच नहीं सकता है। आप कुछ और वर्णों (उदा। रिक्त स्थान) की अनुमति देने के लिए पहचानकर्ता के चारों ओर बैकटिक्स डाल सकते हैं, लेकिन आपको बस यह सुनिश्चित करना होगा कि स्ट्रिंग में कुछ भी हानिकारक नहीं है। – Guffa

उत्तर

15

यदि आपको टेबल बनाने जैसे डेटाबेस संचालन करने की आवश्यकता है, तो आपको SQL स्ट्रिंग निष्पादित करने के बजाय SQL Server Management Objects का उपयोग करना चाहिए।

सीआरयूडी संचालन मानकों के लिए बिल्कुल एकमात्र सही रास्ता है।

अद्यतन: ऐसा प्रतीत होता है कि MySQL क्लाइंट लाइब्रेरी में इस बीमार सलाह के लिए एक सहायक विधि है। आप MySqlHelper.EscapeString (स्ट्रिंग) को कॉल कर सकते हैं।

+0

एरर..धन्यवाद, लेकिन मैं MySQL का उपयोग कर रहा हूं। उस मामले में किसी भी तरह से? – Snake

+0

क्षमा करें, मुझे टैग नहीं देखा गया। मैं MySQL के लिए एक समान पुस्तकालय के बारे में नहीं जानता। –

+0

ठीक है, धन्यवाद! इसके अलावा मैं शायद इसे बेहतर नहीं कर सकता। – Snake

12

!।" "टेबल बनाएं" बस अपने आप से बचने के करने का प्रयास कर कह नहीं "- यह है गलत होने के लिए बहुत आसान है। आपको लगता है कि चाहते हैं ताकि वे पैरामीटर का उपयोग करने के बजाय मैन्युअल रूप से बच सकें?

+0

बिलकुल सही - पैरामीटर हर गिनती पर जीतते हैं। –

+1

मुझे पता है, मैं उत्सुक हूँ। बीटीडब्ल्यू, मैंने सवाल संपादित किया है। यदि उपयोगकर्ता तालिका का नाम दर्ज करता है तो क्या होगा? तब मैं पैरामीटर का उपयोग नहीं कर सकता। – Snake

+1

आप उपयोगकर्ताओं को उस टेबल को परिभाषित नहीं करना चाहते हैं जो वे डालने जा रहे हैं, जिससे एक बहुत बड़ा सुरक्षा छेद हो जाएगा। – Paolo

6

यदि आप वास्तव में, वास्तव में, वास्तव में स्वयं से बचने की ज़रूरत है आपके उदाहरण में):

string EncodeMySqlString(string value) { 
    return value.Replace(@"\", @"\\").Replace("'", @"\'") 
} 
+0

नहीं, एसक्यूएल के लिए नहीं। – erikkallen

+0

@erikkallen: नहीं, यह एमएस एसक्यूएल सर्वर के लिए नहीं है। कृपया मतदान करने से पहले प्रश्न क्या है ... – Guffa

+0

ठीक है, क्षमा करें। दुर्भाग्यवश, डाउनवोट को हटा नहीं सकता है। – erikkallen

1

मुझे लगता है कि केवल एक चीज आपको बस इतना करना value = value.Replace("'", "''")

पाठ्यक्रम यदि आप ऐसा नहीं करना चाहिए के

है, लेकिन आप जानते हैं कि।

संपादित करें: उचित रूप से यह MySQL के लिए गलत है। यह PostgreSQL, एमएस एसक्यूएल और ओरेकल के लिए काम करना चाहिए, हालांकि।

+1

ध्यान दें कि यह MySQL के लिए है, एमएस एसक्यूएल सर्वर नहीं। आपके द्वारा सुझाई गई विधि बिल्कुल MySQL के लिए तारों से बचने के लिए पर्याप्त नहीं है। – Guffa

0

इसके बजाय कमांड पैरामीटर का उपयोग करें। यह खुद से बचने का ख्याल रखता है। एसक्यूएल इंजेक्शन के खिलाफ यह समाधान भी है।

संबंधित मुद्दे