Newsgroup: it.comp.lang.visual-basic
Titolo: ?[VB6+ACCESS+ADO]- Caratteri da evitare

Non usando command e parameters, ho la necessità di prevenire l'inserimento
di caratteri eventualmente *rognosi* nei campi testo.
L' approccio è quello di non usare INSERT INTO e gestire l'apostrofo col
Replace nelle ricerche.
Ho fatto varie prove e caratteri potenzialmente *rognosi* come:
# (Cancelletto)
* (Asterisco)
" (Virgolette)
& (Ampersand)
% (Percentuale)
sembrano non dare problemi.
Vado tranquillo o dimentico qualcosa?
Ciao e grazie

 ha scritto nel
messaggio news:WM%Wd.629176$b5.28...@news3.tin.it...

a prima vista credo che dimentichi proprio l'apostrofo '


IMHO ancora piu` importante e`
'  (apice singolo)
quindi anche
--	(doppio trattino)
_	(sottolineatura)
| e ||	(singolo e doppia pipe)
?	(question mark)
ma tutti questi entrano in gioco piu` che altro se ti hanno
fottuto con l'apice singolo
-- 
ciao, hal

 ha scritto nel messaggio
news:WG1Xd.10162$WC1....@tornado.fastwebnet.it...

Chiedo scusa. Ho postato in fretta e forse mi sono espresso male.
Non sto parlando di immunizzare il db da un' Sql-injection.
Si tratta in questo caso di un'applicazione monoutente, e si farebbe prima
a crackarsi l'mdb.
Io mi riferivo a caratteri particolari che, una volta inseriti nella stringa
sql, sputtanino la query provocando errori o falsando il risultato della
stessa.
In pratica, quello che accade con l'apice non gestito.
E' un eccesso di scrupolo da parte mia?
Ciao

 E' un eccesso di scrupolo da parte mia?
No, anzi...
Di fatto credo che i controlli anti-rottura base di sql siano un paio
per tipo di dati.
1. campi testo
verificare gli apostrofi e la lunghezza rispetto a quanto ospitabile
dal campo;
2. campi numerici
verificare che siano numeri (of course!), controllare gli overflow
e passare il punto come separatore decimale;
3. campi data
verificare che sia una data valida e formattare secondo il database
che deve ricevere i dati: in generale il formato odbc yyy-mm-dd
dovrebbe andare, ma non si sa mai;
Vediamo se a qualcuno viene in mente qualcos'altro, ma gia`
cosi` si e` piuttosto ben coperti.
-- 
ciao, hal

 cosi` si e` piuttosto ben coperti.
bhe io uso dei campi testo con keyup e keydown filtrati, in pratica se
settato su "numerico" controllo l'inserimento del doppio punto, degli zeri
ecc. per l'overflow idem. Uso parametri per numeri prima e dopo la virgola
(che e' il sempre il punto nei sql).
Stessa cosa se settata su money o su date o su testoAz (che accetta solo A/Z
a/z e 0/9)
Fatte una volta ste funzioncine le ricicli sempre.
-- 
[Gigio2k]
http://www.g2kweb.it
[ it-alt.comp.hardware.modding ] - 
http://www.g2kweb.it/ichm


E' sempre molto utile vedere ribaditi dei concetti essenziali
all'integrità del database, e gli accorgimenti che si prendono
per preservarla.
Epperò continuo a spiegarmi male. I miei dubbi riguardano non i
possibili errori di *dati non corrispondenti*, ma i possibili *errori
di sintassi* sui campi testo.
Quando cioè il db ti risponde *non capisco cosa vuoi* piuttosto che
*vuoi fare una cosa sbagliata e non te la lascio fare*.
Faccio l'esempio dell'apostrofo:
Stringa digitata = *O' sole mio* (non il solito O'Malley) ;)
   sEnter = Trim$(txtEnter.Text)
   sSql = "INSERT INTO MyTable (MyName) VALUES ('" & sEnter & "')"
   cn.Execute sSql, , adCmdText
sappiamo che in questo modo la query si sputtana se non raddoppio gli apici.
Alternative:
- Usare Command e Parameters
- Usare recordset e andare di:
   .AddNew "MyName", sEnter
Discorsi simili per SELECT, UPDATE e DELETE, con le dovute differenze.
Ora, in definitiva, la domanda poteva sintetizzarsi in:
Oltre all'apostrofo, esistono altri caratteri che, se non gestiti,
sono in grado di sputtanarti le query, cioè di generare errori di sintassi?
Per questo parlavo di scrupolo eccessivo, del resto si legge sempre e solo
di apostrofo, ma il tarlo....
ma, a rifletterci, potrebbe anche essere un dubbio stupido.
Anzi...lo è!
Difatti sto parlando di stringhe, i cui delimitatori sono gli apici.
E gli unici caratteri che, all'interno di questi, possono essere fraintesi
sono....gli apici stessi.
Ciao