C# problema escape in una query

giovedì 03 febbraio 2011 - 16.38
Tag Elenco Tags  C#  |  .NET 4.0  |  Windows XP  |  Visual Studio 2010  |  SQL Server 2008 R2

saturnus83 Profilo | Newbie

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

ciao.
fai così:

SELECT * FROM [Clienti] WHERE [RagioneSociale] = " + char.ConvertFromUtf32(34).ToString() + txtDescrizione.Text.Trim() + char.ConvertFromUtf32(34).ToString() + ";"


Cristian Barca

saturnus83 Profilo | Newbie

>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

>>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

>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

>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

>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

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

ciao.

Dai una occhiata al progetto che ti ho allegato.

Ciao ciao
Cristian Barca

freeteo Profilo | Guru

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
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5