c#
  • string
  • escaping
  • verbatim-string
  • 2009-03-16 13 views 7 likes 
    7

    मैं निम्न स्ट्रिंग जो संकलन नहीं करेगा:पलायन शब्दशः स्ट्रिंग शाब्दिक

    String formLookupPull = @"SELECT value1, '"+tableName+"', '"+columnName+"' FROM lkpLookups WHERE ""table"" = '" + tableName + "' and ""field"" = '" + columnName + "';"; 
    

    अपमानजनक अनुभाग हैं:

    ""table"" = 
    

    और

    ""field"" = 
    

    संकलक सब हो रही है भागने अनुक्रम पर मिश्रित। क्या कोई देख सकता है कि क्या गलत है?

    +0

    त्वरित उत्तरों के लिए धन्यवाद! –

    +1

    आप अपनी खुद की क्वेरी स्ट्रिंग को एक साथ जोड़ने के बजाय LINQtoSQL का उपयोग कर इस पूरे मुद्दे पर पेंटिंग पर विचार कर सकते हैं। –

    उत्तर

    6

    समस्या यह है कि सभी स्ट्रिंग्स आप श्रृंखलाबद्ध नहीं कर रहे हैं शब्दशः स्ट्रिंग शाब्दिक, केवल संयोजन का पहला भाग है कर रहे हैं।

    दूसरे शब्दों में,

    @"SELECT value1, '" 
    

    पूरे बयान अंतिम स्ट्रिंग के निर्माण के लिए केवल शब्दशः शाब्दिक है।

    आपको अपने सभी तारों के सामने उन्हें सभी क्रियाओं को बनाने के लिए @ जोड़ना होगा।

    कौन सा यह की तरह लग रहे हो जाएगा:

    String formLookupPull = @"SELECT value1, '"+tableName+ @"', '"+columnName+ @"' FROM lkpLookups WHERE ""table"" = '" + tableName + @"' and ""field"" = '" + columnName + @"';"; 
    
    5

    आप उद्धरण से बचने के लिए \" का उपयोग करना चाहते हैं, "" पर नहीं।

    इस तरह

    :

    .. FROM lkpLookups WHERE \"table\" = '" .. 
    

    संपादित करें:

    आगे स्पष्टीकरण:

    आप केवल सभी स्ट्रिंग्स आप श्रृंखलाबद्ध रहे हैं की पहली पर एक @ है। शाब्दिक तारों में (सामने @ के साथ) आप दोहरे उद्धरण के साथ उद्धरण से बचते हैं। सामान्य तारों में, यह स्लैश-कोट है।

    उदा।

    string s = @"this is a literal string with ""quotes"" in it, " 
         + "and this is a normal string with \"quotes\" in it"; 
    
    string t = @"two literal strings" + @", concatenated together."; 
    
    +0

    वर्बैटिम स्ट्रिंग अक्षर एक बचने वाले चरित्र के रूप में उपयोग नहीं करते हैं, केवल एक ही बचने का अनुक्रम "" है, जिसका उपयोग किया जा रहा है। समस्या यह है कि verbatim स्ट्रिंग पहचानकर्ता, @, केवल पहली स्ट्रिंग पर लागू किया जा रहा है, न कि + के साथ जोड़ा जा रहा है। – Whatsit

    +0

    समस्या यह है कि वह अपने स्ट्रिंग प्रकार के लिए गलत भागने अनुक्रम का उपयोग कर रहा है। वह या तो स्ट्रिंग को शाब्दिक (जैसा कि आप कहते हैं) में बदल सकते हैं, या बचने के अनुक्रम को बदल सकते हैं (जैसा कि मैंने कहा) – Blorgbeard

    +0

    सहमत है, लेकिन आपका मूल उत्तर यह है कि सामान्य अर्थ में गलत था, इसलिए यह किसी ऐसे व्यक्ति को भ्रमित करने की संभावना है verbatim स्ट्रिंग अक्षर के साथ बहुत परिचित नहीं है। आपका संशोधित उत्तर बहुत स्पष्ट है। – Whatsit

    1
    String formLookupPull = @"SELECT value1, '"+tableName+"', '"+columnName+"' FROM lkpLookups WHERE \"table\" = '" + tableName + "' and \"field\" = '" + columnName + "';"; 
    

    मैं भी विश्वास है कि आप इस क्वेरी :)

    +0

    lol हाँ चलो आशा करते हैं, मुझे इसके अंदर डीबी आईओ करने के लिए सभी कार्यों के साथ एक डीएलएल दिया गया था ... मुझे पूरा यकीन है कि यह उचित एसक्यूएल से बच रहा है लेकिन मैं वास्तव में बारीकी से देखने के लिए नहीं देखा ... –

    4
    खैर बोली के अपने पहले समाप्त होने के बाद

    निर्माण से पहले इन चरों से बचने कर रहे हैं सही ढंग से, @ प्रतीक नहीं रह गया है वैसे भी इस्तेमाल किया जा रहा है, ताकि आप कर रहे हैं बचने के चरित्र का उपयोग करने के लिए स्वतंत्र। अपने शीर्षक प्रश्न के समाधान के लिए अपने "तालिका" [तालिका] और [क्षेत्र] या एक \ के साथ "चरित्र से बचने की तरह में लिपटे '[' डालने की कोशिश करो।

    String formLookupPull = @"SELECT value1, '" + tableName + "', '" + columnName + "' FROM lkpLookups WHERE [table] = '" + tableName + "' and [field] = '" + columnName + "';"; 
    
    17

    ...

    बचने के लिए बोली शब्दशः स्ट्रिंग शाब्दिक में, का उपयोग बोली-एस्केप अनुक्रम "" (जो दो उद्धरण वर्ण)

    string a = @"He said ""Hi!""..."; // He said "Hi!"... 
    

    अधिक जानकारी के लिए MSDN देखें भागने पर, आदि

    ध्यान दें कि आपके पोस्ट किए गए कोड में, केवल वर्बैटिम स्ट्रिंग सबसे पहले है (@ इससे पहले)। बाद के तार क्रियात्मक नहीं हैं, इसलिए उचित भागने का अनुक्रम \" होगा।

    आप इसे string.Format साथ खूबसूरत देख सकते हैं:

    String formLookupPull = 
        string.Format(@"SELECT value1, '{0}', '{1}' FROM lkpLookups" + 
           @"WHERE ""table"" = '{0}' and ""field"" = '{1}';", 
           tableName, columnName) 
    
    4

    आप एसक्यूएल पैरामीटर का उपयोग नहीं कर सकते हैं, String.Format थोड़ा क्लीनर और शुद्ध से पठनीय "+ संयोजन" हो सकता है।

    string formLookupPull = 
        string.Format(@"SELECT value1, '{0}', '{1}' 
             FROM lkpLookups 
            WHERE ""table"" = '{0}' AND ""field"" = '{1}';", 
           tableName, columnName); 
    
    +0

    शायद ही कभी आप एक डीबीकॉमैंड में डीबी पैरामीटर का उपयोग नहीं कर सकते हैं। – ProfK

    +0

    यह एक ऐसा मामला हो सकता है ... मैं एक लाइब्रेरी का उपयोग कर रहा हूं जो उस सामग्री में से किसी एक को बेनकाब नहीं करता है और मैं जितना संभव हो सके चिपकने की कोशिश कर रहा हूं क्योंकि यह कुछ दुष्प्रभावों के साथ आता है कि मैं अन्यथा पुन: पेश करना होगा ... –

    +0

    +1। इसके लिए 'स्ट्रिंग.फॉर्मैट' इतना बेहतर है। –

    1

    तुम क्यों कॉलम के वस्तुतः नाम के हवाले कर रहे हैं, मेरे लिए अनावश्यक लगते हैं।

    "चयन मूल्य 1," + तालिका नाम + "," कॉलमनाम + "lkpLookups से जहां तालिका = '" + tableName + "' और फ़ील्ड = '" = कॉलमनाम + "';";

    परीक्षण नहीं किया गया लेकिन मुझे लगता है कि आपको यह विचार मिल जाएगा।

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

    • कोई संबंधित समस्या नहीं^_^