2013-08-20 5 views
6

मैं StringBuilder साथ एक स्ट्रिंग निर्माण कर रहा हूँ से एक चरित्र का अंतिम उदाहरण हटाने के लिए।कैसे एक स्ट्रिंग

StringBuilder Q = new StringBuilder(); 
Q.Append("INSERT INTO "); 
Q.Append(_lstview_item); 
Q.Append(" VALUES"); 
Q.Append("("); 
for (i = 0; i < col_no; i++) 
{ 
    Q.Append("'"); 
    Q.Append(col_value[i]); 
    Q.Append("'"); 
    Q.Append(","); 
} 
Q.Append(")"); 
string query = Q.ToString(); 

हालांकि, मुझे अपनी स्ट्रिंग के अंत में "," मिल रहा है। मैं

string query = ext.Substring(0, ext.LastIndexOf(",") + 1); 

का उपयोग कर अधिशेष "," दूर करने के लिए कोशिश की, लेकिन यह भी ")" निकाल देता है।

मैं अंतिम अल्पविराम को कैसे हटा सकता हूं?

वास्तविक परिणाम: INSERT INTO .... VALUES('1','2','3',)

वांछित परिणाम: INSERT INTO .... VALUES('1','2','3')

+5

यह अपने सवाल का जवाब नहीं कर रहा है के साथ

 Q.Append(","); 

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

+0

आपको 'Q.Append (")" क्यों जोड़ें);' अगर आप पहले अल्पविराम को हटाना चाहते हैं? –

+2

समाधान अल्पविराम को हटाने के लिए नहीं है, लेकिन यह अलग-अलग करने के लिए है। –

उत्तर

2

यह:

Q.Append(")"); 

if (col_no > 0) 
{ 
    Q.Length--; 
} 

Q.Append(")"); 

जांच if (col_no > 0), पानी में गिर एक छोटे से है, क्योंकि अगर कोई स्तंभ है, क्वेरी अभी भी अन्य कारणों के लिए असफल हो जायेगी साथ बदलें, लेकिन अगर हम पर विचार StringBuilder में तारों को गठबंधन करने के तरीके पर यह एक टेम्पलेट है, तो चेक दाएं करने की बात है।

आह ... इस तरह से एक प्रश्न बनाना गलत करने के लिए काम है।

0
  1. अपने लक्ष्य को प्राप्त करने का सही तरीका एक पैरामिट्रीकृत क्वेरी का उपयोग करने के लिए है।

:

  • वहाँ अपने प्रश्न का ब्रैकेट
  • शुद्ध जवाब डाल हो सकता है पहले पिछले कोमा नष्ट करने के लिए संभावना है।

    string query = ext.Substring(0, ext.LastIndexOf(",")) + ext.Substring(ext.LastIndexOf(",") + 1); 
    

    या इस:

    string query = ext.Remove(ext.LastIndexOf(","), 1); 
    
  • 1

    मैं इससे पहले कि आप पिछले ) जोड़ने, इसलिए पहले अल्पविराम दूर करने के लिए सुझाव है: यदि आप वास्तव में एक बनाना चाहते हैं

    for (i = 0; i < col_no; i++) 
    { 
        Q.Append("'"); 
        Q.Append(col_value[i]); 
        Q.Append("'"); 
        Q.Append(","); 
    
    } 
    if(col_no > 0) Q.Length --; // <-- this removes the last character 
    Q.Append(")"); 
    string query = Q.ToString(); 
    

    हालांकि, एसक्यूएल-क्वेरी मैं एसक्यूएल-इंजेक्शन को रोकने के लिए पर एसक्यूएल-पैरामीटर का उपयोग करने का दृढ़ता से सुझाव दूंगा। तो अपने एसक्यूएल-स्ट्रिंग में मान शामिल न करें।

    13

    तुम एक स्थिति में एक विशिष्ट चरित्र को दूर करने के लिए "निकालें" विधि का उपयोग कर सकते हैं:

    query = query.Remove(query.LastIndexOf(","), 1); 
    
    0

    इस प्रयास करें।नीचे अगर हालत में सरल तर्क

    चेक befor अल्पविराम लाइन

        **if(i!=(col_no-1)) 
            { 
            Q.Append(","); 
            }* 
    

    संलग्न अपने कोड के साथ।

        for (i = 0; i < col_no; i++) 
            { 
            Q.Append("'"); 
            Q.Append(col_value[i]); 
            Q.Append("'"); 
            **if(i!=(col_no-1)) 
            { 
            Q.Append(","); 
            }** 
    
            } 
    
    संबंधित मुद्दे