orione1976 ha scritto:
Guarda, ho provato di tutto, anche a cambiare il metodo di scrittura anche se sinceramente non ne vedevo la necessità visto che i dati sono presenti nel database, ho cambiato il metodo di lettura e funziona senza errori... però mi piacerebbe capire il motivo perchè ok, funziona, problema risolto... ma perchè con il ciclo while faceva così?
[...]
con il codice sopra ripeto che legge tutto...
E' molto semplice: hai riscritto la query che inizialmente (non ci abbiamo fatto caso) era sbagliata.
La query iniziale era così:
Select *from Clienti where @ID=@ID
In pratica, hai selezionato tutti i record dove il valore del parametro @ID è uguale al valore del parametro @ID: la query ti restituisce pertanto
tutti i record della tabella!
Usando il ciclo while(), effettuavi la scansione di tutti i record della tabella fino ad arrivare a quel record in cui il campo in questione era nullo, provocando l'errore.
Adesso hai tolto il ciclo while(), ma in realtà il problema si è risolto cambiando la query, che è diventata così:
"Select *from Clienti where ID = " & tbID.Text & ""
In questa versione, pur togliendo (sbagliando) il parametro @ID, fai corretto riferimento al campo ID della tabella nella clausola WHERE, quindi ti viene di fatto restituito uno e un solo record, ossia quello che stai effettivamente cercando.
A questo punto, che tu usi il ciclo while() oppure no, se nel campo incriminato è presente un valore come dici, il codice avrebbe funzionato in ogni caso.
Riepilogando meglio in conclusione, è sufficiente che tu torni alla versione originale del tuo codice e correggi la query così:
Select *from Clienti where ID=@ID
eliminando quindi il carattere "@" di troppo.
Va da sè comunque che quel campo su cui viene segnalato l'errore, per almeno un record contiene un valore nullo, e questa condizione rimane.
Ciao!