2011-10-12 4 views
7

मेरे पास एक स्ट्रिंगस्ट्रिंग में डबल एस्ट्रोफ़े के साथ एस्ट्रोफ़े को कैसे बदला जाए?

good overview of ESP's in more detail than you probably need है।

एसक्यूएल तालिका यह त्रुटि दे रहा है में डालने है। इसलिए मैं की तरह

good overview of ESP''s in more detail than you probably need

कैसे सी # में इस हेरफेर करने के लिए डबल apostrophe के साथ स्ट्रिंग में apostrophe की जगह करना चाहते हैं?

+1

आप अपने डेटाबेस से बच कार्यों का उपयोग करना चाहिए। यदि आप नहीं करते हैं तो आप एसक्यूएल इंजेक्शन के लिए खुद को कमजोर छोड़ सकते हैं। http://stackoverflow.com/questions/249567/algorithm-to-avoid-sql-injection-on-mssql-server-from-c-code – CheeseSucker

+0

या, और भी बेहतर: parameterised प्रश्नों। – MatBailie

उत्तर

10

बहुत आसान:

string s = "good overview of ESP's in more detail than you probably need."; 
string escaped = s.Replace("'","''"); 

नोट: यह आमतौर पर आदेश पैरामीटर का उपयोग करने सुरक्षित है। विशेष रूप से यदि इनपुट स्ट्रिंग के मान आपके कोड (यानी उपयोगकर्ता प्रविष्टियों) द्वारा नियंत्रित नहीं होते हैं।

+3

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

+0

स्ट्रिंग बचने पर इंजेक्शन अभी भी हो सकता है? इंजेक्शन, जैसा कि मैं इसे समझता हूं, एक एकल धर्मत्याग का उपयोग करके समय-समय पर एसक्यूएल को समाप्त करता है। –

8

पैरामीटर वस्तु का प्रयोग करें।

myCommand.InsertCommand.Parameters.Add("@myString", SqlDbType.VarChar, 200); 
    myCommand.InsertCommand.Parameters["@myString"].Value = @"good overview of ESP's in more detail than you probably need."; 
0

String.Replace(String,String) ठीक काम करना चाहिए। इस उदाहरण में, आप चाहते हैं:

String.Replace("'", "''") 

हालांकि, मुझे नहीं लगता कि यह आपकी समस्या को ठीक करेगा। मुझे लगता है कि आप अधिक उचित रूप से देख रहे हैं:

String.Replace("'", "\'") 
यह है कि MySQL के लिए किया जा रहा

कारण, और मैं एसक्यूएल के अन्य संस्करणों कल्पना, उम्मीद तार एकल उद्धरण में संलग्न किया जाना है।

+0

मैं मानता हूं कि यह सीधे सवाल का जवाब देता है, लेकिन यह ओपी को खराब अभ्यास में सहायता करता है। यदि पैरामीटरयुक्त प्रश्नों का उपयोग किया जाता है, तो यह समस्या दूर हो जाती है और वे एक अभ्यास को अपनाते हैं जो इंजेक्शन हमलों के खिलाफ सुरक्षा करता है, निष्पादन योजना कैशिंग आदि में सहायता करता है। – MatBailie

+0

@dambrisco: कुछ एसक्यूएल बोलियां भागने के बजाय एक डबल एस्ट्रोफ़े ('') का उपयोग करती हैं अनुक्रम (\ ') आपने MySQL के लिए सुझाव दिया है। –

+0

@Dems - मैं पूरी तरह से सहमत हूं, लेकिन, सवाल यह है कि, मुझे लगता है कि बच्चे के कदम उठाने के लिए बेहतर हो सकता है। किसी ऐसे व्यक्ति को पैरामीटरकरण की व्याख्या करना जो भागने के दृश्यों के बारे में नहीं जानता है, शुरू करने के लिए एक खराब जगह हो सकती है। भले ही, मेरे से दाओक के समाधान का उपयोग करना बेहतर होगा। –

2

मैं उम्र के लिए इस समस्या पर काम कर रहा था। क्लाइंट पर इसे दो सिंगल कोट्स के साथ सिंगल कोट को बदल दें। यह काम करता है यदि आप कई वर्चर इनपुट पैरामीटर के साथ एक एसपी निष्पादित कर रहे हैं। इसके साथ एकमात्र समस्या एसक्यूएल इंजेक्शन है यानी लोग देख सकते हैं कि आप क्लाइंट पर क्या कर रहे हैं जो कभी अच्छी बात नहीं है। सर्वर पर SQLparameters का उपयोग करने के लिए इसका एकमात्र तरीका है, जैसा कि उन्होंने पहले कहा था।

0

myCommand.InsertCommand.Parameters.Add ("@ myString", SqlDbType.VarChar, 200); myCommand.InsertCommand.Parameters [ "@ myString"]। मूल्य

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