Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
C# problema escape in una query
giovedì 03 febbraio 2011 - 16.38
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
C#
|
.NET 4.0
|
Windows XP
|
Visual Studio 2010
|
SQL Server 2008 R2
saturnus83
Profilo
| Newbie
45
messaggi | Data Invio:
gio 3 feb 2011 - 16:38
Ciao forum,
il problema è molto banale ma fatico a trovarne la soluzione.
Devo effettuare una query di Select così fatta:
"SELECT * FROM [Clienti] WHERE [RagioneSociale] = '" + txtDescrizione.Text.Trim() + "'"
Purtroppo nel caso in cui nel txtDescrizione uno scriva in maiuscolo ad es.: CAFFE', o VANITA'.
Ovvero se uno inserisce un apice al momento della query mi si genera un'eccezione.
Come posso arginare il problema in modo veloce e raffinato?
Grazie mille.
Andrea
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
gio 3 feb 2011 - 16:45
ciao.
fai così:
SELECT * FROM [Clienti] WHERE [RagioneSociale] = " + char.ConvertFromUtf32(34).ToString() + txtDescrizione.Text.Trim() + char.ConvertFromUtf32(34).ToString() + ";"
Cristian Barca
saturnus83
Profilo
| Newbie
45
messaggi | Data Invio:
gio 3 feb 2011 - 16:50
>ciao.
>fai così:
>
>SELECT * FROM [Clienti] WHERE [RagioneSociale] = " + char.ConvertFromUtf32(34).ToString()
>+ txtDescrizione.Text.Trim() + char.ConvertFromUtf32(34).ToString()
>+ ";"
>
>
>Cristian Barca
Purtroppo anche così mi da l'eccezione. :(
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
gio 3 feb 2011 - 17:01
>>ciao.
>>fai così:
>>
>>SELECT * FROM [Clienti] WHERE [RagioneSociale] = " + char.ConvertFromUtf32(34).ToString()
>>+ txtDescrizione.Text.Trim() + char.ConvertFromUtf32(34).ToString()
>>+ ";"
>>
>>
>>Cristian Barca
>
>Purtroppo anche così mi da l'eccezione. :(
con il codice che ti ho inviato e ipotizzando che nella textBox ci sia scritto VANITA', la query dovrebbe risultare composta nel seguente modo:
SELECT * FROM [Clienti] WHERE [RagioneSociale] = "VANITA'";
se è cosi deve funzionare per forza.
Cristian Barca
saturnus83
Profilo
| Newbie
45
messaggi | Data Invio:
gio 3 feb 2011 - 17:16
>con il codice che ti ho inviato e ipotizzando che nella textBox
>ci sia scritto VANITA', la query dovrebbe risultare composta
>nel seguente modo:
>
>SELECT * FROM [Clienti] WHERE [RagioneSociale] = "VANITA'";
>
>se è cosi deve funzionare per forza.
>
>
>Cristian Barca
Però il campo [RagioneSociale] è di tipo testo e quindi richiede a sua volta gli apici.... la stringa quindi sarebbe:
SELECT * FROM [Clienti] WHERE [RagioneSociale] = ' VANITA ' '
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
gio 3 feb 2011 - 17:22
>Però il campo [RagioneSociale] è di tipo testo e quindi richiede
>a sua volta gli apici.... la stringa quindi sarebbe:
>SELECT * FROM [Clienti] WHERE [RagioneSociale] = ' VANITA ' '
E' qui che sbagli. Il campo è di tipo testo però se fai come hai scritto tu, la query è come se terminasse prima.
Se al posto di Vanita' ci fosse DE' LUIGI e scrivi la query come dici tu uscirebbe una cosa del genere:
SELECT * FROM [Clienti] WHERE [RagioneSociale] = ' DE' LUIGI '
quando la vai ad eseguire è come se si fermasse a DE' e non vede tutto quello che c'è dopo andando in errore.
se invece l'istruzione risulta in questo modo:
SELECT * FROM [Clienti] WHERE [RagioneSociale] = " DE' LUIGI " (con i doppi apici (shift + 2) la query funziona benissimo.
per i doppi apici devi usare char.ConvertFromUtf32(34).ToString()
Cristian Barca
saturnus83
Profilo
| Newbie
45
messaggi | Data Invio:
gio 3 feb 2011 - 17:33
>ciao.
>fai così:
>
>SELECT * FROM [Clienti] WHERE [RagioneSociale] = " + char.ConvertFromUtf32(34).ToString()
>+ txtDescrizione.Text.Trim() + char.ConvertFromUtf32(34).ToString()
>+ ";"
>
>
>Cristian Barca
A me continua a non funzionare... una curiosità... ma perchè inserisci questo alla fine: ";" ?
saturnus83
Profilo
| Newbie
45
messaggi | Data Invio:
gio 3 feb 2011 - 17:56
Comunque ho risolto da solo facendo così:
"SELECT * FROM [Clienti] WHERE [RagioneSociale] = ' " + txtDescrizione.Text.Replace(" ' "," ' ' ").Trim() + " ' "
Col tuo metodo purtroppo non mi funzionava.
Grazie lo stesso.
Andrea
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
ven 4 feb 2011 - 01:16
1551_WindowsApplication14.zip
ciao.
Dai una occhiata al progetto che ti ho allegato.
Ciao ciao
Cristian Barca
freeteo
Profilo
| Guru
6.542
messaggi | Data Invio:
dom 6 feb 2011 - 21:04
Ciao,
va bene fare il replace degli apici singoli, ma il modo migliore per gestire le query sul database sarebbe quello di usare dei Parametri da passare al command.
Puoi prendere spunto qui:
http://msdn.microsoft.com/en-us/library/ms254953.aspx
Ciao.
Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !