2013-08-20 16 views
6

Ich bin eine Zeichenfolge mit StringBuilder erstellen.Wie LAST INSTANCE eines Zeichens aus einer Zeichenfolge entfernen

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(); 

Allerdings bin ich ein "," am Ende meiner Schnur zu bekommen. Ich versuchte

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

mit dem Überschuss "," zu entfernen, aber dies beseitigt auch die ")". Wie kann ich das letzte Komma nur entfernen?

tatsächliches Ergebnis: INSERT INTO .... VALUES('1','2','3',)

gewünschtes Ergebnis: INSERT INTO .... VALUES('1','2','3')

+5

Es ist nicht Ihre Frage zu beantworten, aber ich wirklich empfehlen Ihnen, eher parametrisierte Abfragen zu verwenden, als sie Erzeugen von Strings verketten. Es gibt eine Tonne Posts über SO, wie man das macht. –

+0

Warum fügen Sie 'Q.Append (") ");' überhaupt hinzu, wenn Sie das Komma zuerst entfernen möchten? –

+2

Die Lösung besteht nicht darin, das Komma zu entfernen, sondern das anders zu machen. –

Antwort

2

Diese:

Q.Append(")"); 

ersetzen mit

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

Q.Append(")"); 

Der Scheck if (col_no > 0) ein wenig über Bord, denn wenn es keine Spalte ist, nach wie vor die Abfrage aus anderen Gründen fehlschlagen, aber wenn man bedenkt, Dies ist eine Vorlage, wie Sie Strings in einem StringBuilder kombinieren, dann ist die Prüfung die richtige Sache zu tun.

Ah ... Aufbau einer Abfrage auf diese Weise ist die falsche Sache zu tun.

0
  1. der richtige Weg, um Ihr Ziel zu erreichen, ist eine parametrisierte Abfrage zu verwenden.
  2. besteht die Möglichkeit, das letzte Koma zu löschen, bevor die Halterung
  3. die reine Antwort auf Ihre Frage zu stellen kann dies sein:

.

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

oder dies:

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

Ich würde vorschlagen, das Komma zuerst zu entfernen, bevor Sie den letzten ) hinzufügen, so:

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(); 

Wenn Sie jedoch wirklich eine erstellen möchten sql-query ich würde dringend empfehlen sql-parameter zu verwenden verhindern sql-injection. Nehmen Sie also die Werte nicht in Ihre SQL-Zeichenfolge auf.

13

Sie können die „Entfernen“ Methode ein bestimmtes Zeichen in einer Position entfernen:

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

bereits.einfache Logik

Überprüfen Sie, ob Zustand der unten in vor dem Komma Linie

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

mit Ihrem Code anhängen. Ersetzen

    for (i = 0; i < col_no; i++) 
        { 
        Q.Append("'"); 
        Q.Append(col_value[i]); 
        Q.Append("'"); 
        **if(i!=(col_no-1)) 
        { 
        Q.Append(","); 
        }** 

        } 
0

  Q.Append(","); 

innerhalb der for-Schleife mit

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