Newsgroup: it.comp.lang.visual-basic
Titolo: Vb2008 ExprEd - Query su Db dato con carattere speciale " ' "

Non mandatemi al diavolo
Ho il seguente problema.
in una combobox ho un elenco di nominativi
Quindi scegliendone uno riesco a fare una SELECT nella datagrid sottostante, 
mediante il parametro che prende dalla combobox
Ora funziona perfettamente, tranne che con il primo nominativo : che è 
'pippo ... ovvero con l'apice davanti. Ovviamente nella tabella il 
nominativo con l'apice e non ha senso che lo tolga
Come faccio a far eseguire correttamente a VB l'istruzione.
ritengo che il problema lo debba risolvere in VB poichè la select Mysql mi 
funziona perfettamente
Ora avevo visto la soluzione, ma non ricordo più dove mi aiutate ?
Grazie in anticipo
roberto
Ecco il mio codice:
Public Sub DataLoadingSearching(ByRef pDataGridViewControl As DataGridView, 
ByRef pRecordCountInt32 As Int32, ByVal pContactNameString As String, ByRef 
pErrorMessageString As String)
Dim SQLString As String
Dim SearchDataGridViewFormat As New DataGridView
Try
SQLString = "SELECT r.cognome, r.nome, c.descrizione, r.telefono1, 
r.telefono2, r.fax1, r.fax2 FROM rubrica r LEFT JOIN clienti c ON 
r.id_cliente=c.id_cliente WHERE c.descrizione LIKE CONCAT('%'," & "'" & 
pContactNameString & "'" & ",'%') ORDER BY r.cognome, r.nome ASC;"
Using mMySQLConnection As New MySqlConnection(mMySQLConnectionString)
mMySQLConnection.Open()
Using mMySqlCommand As New MySqlCommand
With mMySqlCommand
.Connection = mMySQLConnection
.CommandType = CommandType.Text
.CommandText = SQLString

 pContactNameString & "'" & ",'%') ORDER BY r.cognome, r.nome ASC;"
Dovrebbe essere sufficiente sostituire
pContactNameString
con
pContactNameString.Replace("'", "''")
ciao
stefano

 stefano
grazie 1000 funziona perfettamente
ciao
roberto 

 Non mandatemi al diavolo
Ok, al massimo mandamici te: ho letto solo molto molto velocemente il
post (il pc è andato, sto facendo i backups e tra poco formatto),
quindi ti rispondo in base al titolo e basta... non si sa mai se ci
indovino!
Io mi sono scritto una classe per connettermi ai database... per ogni
nuovo gestionale la importo così ho tutte le mie funzioncine già
pronte.
Tra queste ce n'è una che mi aggiunge un apice in più agli apici nelle
stringhe delle query sql...
Visto il titolo, mi sembra opportuno dirti di fare un .replace
("'","''")
oppure, se le stringhe all'interno della query le delimiti con il
doppio apice, fai .replace("""","""""")
Ciao

 roberto 
E pensare che stavo per scrivere un'errata corrige,
perché in mysql per inserire un apice si dovrebbe sostiuire il ' con  \'
ad esempio
http://forum.html.it/forum/showthread/t-830402.html
vabbè che non uso MySQL però ora son io che non capisco perché ti ha 
funzionato :-)
ciao
stefano


Guarda vista la mia niubbiaggine posso solo dire che funziona la tua 
soluzione, ma posso rilevare che sia altro linguaggio e comunque alla fine 
arrivano ad una soluzione simile alla tua
ciao
roberto 

("'","''")
Questa funziona
ciao
roberto

 funzionato :-)
Penso che il raddoppio dell'apice sia comunque uno standard ANSI SQL,
e quindi supportato lo stesso.
Ti posso confermare che anche nei nostri programmi usiamo il raddoppio
indipendentemente dal DB e non ha mai creato problemi, MySQL incluso.
Anzi, curiosamente l'unica cosa a livello sintattico che ci ha dato
problemi con MySQL è proprio l'uso "promiscuo" che fa del carattere di
escape \ , dove si vede che è stato fatto in un'ottica prettamente
unix....
esempio classico, campo varchar con un percorso di file:
sei costretto a modificare le tue query per passare da "SET CAMPO='C:
\PIPPO\PLUTO.TXT'" a "SET CAMPO='C:\\PIPPO\\PLUTO.TXT'", ed è un po'
fastidioso perchè è l'unico DBMS che ci ha costretto a questa
eccezzione dai tempi di VB3...

 indipendentemente dal DB e non ha mai creato problemi, MySQL incluso.
[CUT]
Ciao Luca, grazie del chiarimento,
si in effetti sono andato a rigurdare lo standard ed è come dici tu 
(avrei dovuto farlo preventivamente ... ma tant'è),
non conoscendo MySql mi sono lasciato ingannare un po' dal link che ho 
trovato e postato.
grazie
ciao
stefano