2010-06-07 12 views
6
((string)dt.Rows[i][1]).Replace("'", "\\'") 

Voglio il risultato che se una stringa lo ha citato, cambialo in una barra, ad es. John's ->John\'sstring.Replace non funziona per la quotazione

ma la funzione di sostituzione di cui sopra non funziona correttamente. risulta come John\\'s

ma se cambiamo il codice per

((string)dt.Rows[i][1]).Replace("'", "\'") 

che dà il risultato come John's

non cambia comunque.

+3

Sembra come se si vuole sterilizzare una stringa SQL. Se questo è vero, ti preghiamo di notare che ci sono * molto * modi migliori rispetto alla sostituzione manuale delle virgolette. Dichiarazioni preparate per esempio. – BalusC

+1

@John Rash - Non sono sicuro che la tua modifica abbia aiutato qui, per quanto posso dire che hai corretto il codice di Azhar cambiando "\" "in" \\ "", quindi il tuo tipo di modifica ha risposto alla domanda :-) –

+1

@Steve - Non ho aggiunto nulla Ho solo modificato la formattazione, guarda la [fonte originale] (http://stackoverflow.com/revisions/ceed45a3-95dc-4126-8d1d-3b004307214b/view-source) –

risposta

16

Perché il backslash è il carattere di escape, è necessario dire che si vuole trattare come una stringa letterale. A tale scopo, anteponendo un @ per stringa:

((string)dt.Rows[i][1]).Replace("'", @"\'") 
+1

L'approccio @ è più veloce quando ci sono molte cose da scappare e se mai copi e incolli in un diverso linguaggio .NET sarai felice di aver solo bisogno di cambiare il @ piuttosto che tutti i \\ –

9

Provare un doppio backslash.

\\

Solo una barra rovesciata è una via di fuga; due è un vero backslash.

4

Utilizzare "\\'" o @"\'" per la stringa di sostituzione. Il backslash è il carattere di escape nei letterali di stringa C#. Vedere la spiegazione di string literals in C#: \' in una stringa risultati letterali in una sola virgoletta. Il motivo per cui questa sequenza di escape esiste, è perché le virgolette singole richiederebbero l'escape se si utilizzava un valore letterale char ('\'').

Il @ indica che si sta utilizzando la sintassi stringa verbatim, che consente per le stringhe multilinea ed elimina la necessità di fuggire personaggi, a parte virgolette, che si sarebbe fuggire con le doppie virgolette doppie (stile Visual Basic).

1

Sostituire (" '", "\'") utilizzare una doppia barra

0

si potrebbe usare qualcosa di simile:

private static string replace(String input) 
{ 
    return Regex.Replace(input, "('|\")", "\\'"); 
} 

static void Main(string[] args) 
{ 
    String value1 = "John Steve's"; 
    String value2 = "John Steve\"s"; 

    Console.WriteLine(replace(value1)); 
    Console.WriteLine(replace(value2)); 
} 

Risultati:

John Steve \ 's

John Steve \ 's

3

Potete chiarire per favore? Sta dicendo che

((string)dt.Rows[i][1]).Replace("'", "\\'") 

fa non sostituire un ' con \'?

Perché l'ho appena provato e funziona perfettamente. Cioèquesto

  string one = "blah'"; 
      string two = one.Replace("'", "\\'"); 

      Console.WriteLine(two); 

Stampe blah\'

0

Se si desidera preparare una query SQL, penso che il metodo migliore è quello di sostituire un singolo 'per ''. Ad esempio, se si desidera cercare John O'Connor, ciò funzionerebbe (almeno in SQL Server, Access, Oracle, ...).

selezionare ... da parte degli utenti dove username = 'Jonh O''Connor'

+0

Se vuoi preparare un Query SQL come quella, no. – Thorarin

Problemi correlati