2009-03-19 15 views
17

मैं एक प्रश्न के लिए सी # में पैरामीटर क्वेरी के लिए एसक्यूएल बनाने की कोशिश कर रहा हूं जिसमें LIKE %% कमांड होगा।सी # पैरामीटर क्वेरी का निर्माण एसक्यूएल - LIKE%

यहाँ है कि मैं क्या हासिल करने के लिए कोशिश कर रहा हूँ (कृपया ध्यान दें कि डेटाबेस Firebird है)

var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE '%?%'", TABLE, NAME); 
cmd.Parameters.AddWithValue(NAME, "JOHN"); 

अब मैं हर एक क्रमचय की कोशिश की है काम करने के लिए, मैं कोशिश की है पैरामीटर प्राप्त करने के लिए है,

  • जोड़ना पैरामीटर के लिए % चरित्र,

    cmd.Parameters.AddWithValue(NAME, "%" + "JOHN" + "%"); 
    
  • या

    cmd.Parameters.AddWithValue(NAME, "'%" + "JOHN" + "%'"); 
    

मैं यह काम करने के लिए नहीं कर पा रहे, मैं कैसे के लिए एक पैरामीटर का उपयोग कर सकते काम करने के लिए पसंद है।

सुझावों का स्वागत है!

+0

ऐसा लगता है वहाँ कुछ लापता कोड है की तरह है जहाँ आप आदेश को एसक्यूएल बताए रहे हैं? आप क्या त्रुटि प्राप्त कर रहे हैं या क्वेरी परिणाम है जो आप उम्मीद करते हैं? –

+0

हां, एसक्यूएल को Cmd.CommandText पैरामीटर को असाइन किया जा रहा है। –

उत्तर

26

आपके पास क्वेरी में स्ट्रिंग अक्षर के अंदर पैरामीटर नहीं हो सकते हैं। पूरे मूल्य पैरामीटर, और स्ट्रिंग के लिए वाइल्डकार्ड जोड़ें:

var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE ?", TABLE, NAME); 
Cmd.Parameters.AddWithValue(NAME, "%" + "JOHN" + "%"); 
+0

एक उदाहरण होगा? ऐसा लगता है कि आपने बस अपना कोड कॉपी किया है। –

+0

अधिक ध्यान दें: उन्होंने जंगली कार्ड को पैरामीटर में स्थानांतरित कर दिया। यह काम करेगा, लेकिन यह करने के लिए यह गलत तरीका है। –

+0

@ मियाहाद: ध्यान दें कि केवल यही है? ऑपरेटर की तरह, कोई वाइल्डकार्ड वर्ण नहीं और कोई apostrophes नहीं। – Guffa

-5

अतीत में ऐसा करने पर, मैंने इसे एसक्यूएल में एकीकृत किया है, यह सुनिश्चित कर रहा हूं कि मैं एसक्यूएल इंजेक्शन से निपटने के लिए प्रश्न चिह्नों के साथ सिंगल कोट्स को प्रतिस्थापित करता हूं। उदाहरण:

var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE '%{2}%'", 
    TABLE, 
    NAME, 
    JOHN.Replace("'","?")); 
+1

सिंगल कोट्स को दो सिंगल कोट्स के साथ प्रतिस्थापित करना बेहतर होगा, ताकि उद्धरणों सहित वैध खोज वास्तव में काम कर सकें। 'बदलें (" '","' '') ' – Blorgbeard

+2

यह एसक्यूएल इंजेक्शन हमलों का खुलासा करता है – Ricibald

4
var SQL = string.Format("SELECT * FROM {0} WHERE {1} LIKE '%' + ? + '%'", TABLE, NAME); 
Cmd.CommandText = SQL; 
Cmd.Parameters.Add("?", SqlDbType.VarChar, 50).Value = "JOHN"; 
+0

यह एसक्यूएल फ़ायरबर्ड के लिए मान्य है? –

+0

मुझे फायरबर्ड आवश्यकता नहीं दिखाई दे रही थी। मैंने यह सुनिश्चित करने के लिए एसक्यूएल को अपडेट किया है कि यह ठीक है, लेकिन पैरामीटर कोड गलत है क्योंकि एसक्यूएलडीबी टाइप एनम एसक्यूएल सर्वर के लिए था। मैं अभी भी AddWithValue से बचना पसंद करता हूं, हालांकि –

+0

यह सिर्फ मेरे लिए काम नहीं कर रहा है। मुझे निम्नलिखित त्रुटि प्राप्त हो रही है; FirebirdSql.Data.FirebirdClient.FbException: गतिशील एसक्यूएल त्रुटि अभिव्यक्ति मूल्यांकन समर्थित नहीं ----> FirebirdSql.Data.Common.IscException: प्रकार 'FirebirdSql.Data.Common.IscException' के अपवाद फेंक दिया गया था। –

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