2011-10-12 13 views
7

Ho una stringaCome sostituire l'apostrofo con doppio apostrofo nella stringa?

good overview of ESP's in more detail than you probably need.

Durante l'inserimento nella tabella SQL è in errore. Quindi voglio sostituire apostrofo nella stringa con il doppio apostrofo come

good overview of ESP''s in more detail than you probably need

come manipolare questo in C#?

+1

È necessario utilizzare le funzioni di escape del database. Potresti lasciarti vulnerabile alle iniezioni SQL se non lo fai. http://stackoverflow.com/questions/249567/algorithm-to-avoid-sql-injection-on-mssql-server-from-c-code – CheeseSucker

+0

Oppure, ancora meglio: query parametrizzate. – MatBailie

risposta

10

Molto facile:

string s = "good overview of ESP's in more detail than you probably need."; 
string escaped = s.Replace("'","''"); 

Nota: Di solito è più sicuro di utilizzare parametri di comando. Soprattutto se i valori delle stringhe di input non sono controllati dal codice (cioè voci dell'utente).

+3

Mentre questo è tecnicamente corretto, sta guidando il richiedente originale nella direzione sbagliata. Molto meglio usare i parametri corretti ed evitare le vulnerabilità di SQL injection. –

+0

Si può ancora verificare l'iniezione, se la stringa è sfuggita? L'iniezione, a quanto ho capito, termina prematuramente la sql usando un singolo apostofato. –

8

Utilizzare l'oggetto Parameter.

myCommand.InsertCommand.Parameters.Add("@myString", SqlDbType.VarChar, 200); 
    myCommand.InsertCommand.Parameters["@myString"].Value = @"good overview of ESP's in more detail than you probably need."; 
0

String.Replace(String,String) dovrebbe funzionare correttamente. In questo esempio, è necessario:

String.Replace("'", "''") 

Tuttavia, non penso che risolverà il problema. Immagino che stai in modo più appropriato alla ricerca di:

String.Replace("'", "\'") 

La ragione di questo è che MySQL, e mi immagino le altre versioni di SQL, aspetto che le stringhe per essere racchiuse tra virgolette singole.

+0

Sono d'accordo che questo risponde direttamente alla domanda, ma assiste l'OP in una cattiva pratica. Se vengono utilizzate query parametrizzate, questo problema scompare E adottano una pratica che protegge dagli attacchi di iniezione, assiste nella cache del piano di esecuzione, ecc. Ecc. – MatBailie

+0

@dambrisco: alcuni dialetti SQL utilizzano un doppio apostrofo ('') invece della fuga sequenza (\ ') suggerita per MySQL. –

+0

@Dems - Sono pienamente d'accordo, ma, data la domanda, ho pensato che sarebbe stato meglio fare piccoli passi. Spiegare la parametrizzazione a qualcuno che non sembra conoscere le sequenze di escape potrebbe essere un brutto punto di partenza. Indipendentemente da ciò, però, sarebbe molto meglio usare la soluzione di Daok che la mia. –

2

Stavo lavorando su questo problema da anni. Fatelo sul client, sostituendo la citazione singola con due virgolette singole. Questo funziona se stai eseguendo una sp con diversi parametri di input varchar. L'unico problema con questo è l'iniezione SQL, cioè le persone possono vedere ciò che stai facendo sul client che non è mai una buona cosa. L'unico modo per aggirare questo è usare SQLparameters sul server, come hanno detto prima.

0

myCommand.InsertCommand.Parameters.Add ("@ myString", SqlDbType.VarChar, 200); myCommand.InsertCommand.Parameters ["@ myString"]. Valore

Problemi correlati