PDA

View Full Version : [VB.NET] Datareader e valori NULL


Frykky
20-11-2009, 11:34
nel mio programma estraggo da un database un recordo con un datareader e creo un oggetto di una classe da me definita con questo codice:


drSess = comElencoOperazioni.ExecuteReader()
drSess.Read()
Sessione = New Sessione(drSess("Chiave"), drSess("Farmacia"), drSess("Centro"), drSess("Data_creazione"), drSess("Data_inizio"), drSess("Data_fine"), drSess("Stato"), drSess("Utente"), drSess("Codass"), drSess("Nota"), drSess("Numero_ricette"), drSess("Numero_prenotazioni"), drSess("Telefono"), drSess("Website"))


qual'è il problema, beh che se qualcuno di quei campi è NULL allora mi dice

Cast non valido dal tipo 'DBNull' al tipo 'Date'
Ma può essere anche String etc..

Cosa posso fare?

f@bio80
20-11-2009, 12:28
nel mio programma estraggo da un database un recordo con un datareader e creo un oggetto di una classe da me definita con questo codice:


drSess = comElencoOperazioni.ExecuteReader()
drSess.Read()
Sessione = New Sessione(drSess("Chiave"), drSess("Farmacia"), drSess("Centro"), drSess("Data_creazione"), drSess("Data_inizio"), drSess("Data_fine"), drSess("Stato"), drSess("Utente"), drSess("Codass"), drSess("Nota"), drSess("Numero_ricette"), drSess("Numero_prenotazioni"), drSess("Telefono"), drSess("Website"))


qual'è il problema, beh che se qualcuno di quei campi è NULL allora mi dice

Cast non valido dal tipo 'DBNull' al tipo 'Date'
Ma può essere anche String etc..

Cosa posso fare?

drSess("Chiave").ToString...

Frykky
20-11-2009, 16:13
beh si però mi costringe ad avere tutti i valori string perchè altrimenti mi dice

Cast non valido dalla stringa "" al tipo 'Date'.

:muro:

MarcoGG
20-11-2009, 20:10
Se c'è la possibilità che vengano restituiti valori DBNull, devi condizionare l'inserimento nel costruttore del tuo oggetto, controllando prima i valori restituiti dal Reader, utilizzando variabili o oggetti di appoggio :

Dim S As String = ""
If Not TypeOf Reader("campoStringa") Is DBNull Then S = Reader("campoStringa")

Considera che DBNull è un tipo.
In questo modo, comunque vada, S verrà passata al costruttore nel modo corretto.

Analogamente per le date ecc... ;)

Kralizek
21-11-2009, 00:44
Se c'è la possibilità che vengano restituiti valori DBNull, devi condizionare l'inserimento nel costruttore del tuo oggetto, controllando prima i valori restituiti dal Reader, utilizzando variabili o oggetti di appoggio :

Dim S As String = ""
If Not TypeOf Reader("campoStringa") Is DBNull Then S = Reader("campoStringa")

Considera che DBNull è un tipo.
In questo modo, comunque vada, S verrà passata al costruttore nel modo corretto.

Analogamente per le date ecc... ;)

anche

Dim S As String = ""
If Not Reader.IsDbNull(0) Then S = Reader.GetString(0)

cmq preferisco usare la modalitá disconnessa e poi usare le LinqDataSetExtensions :)

MarcoGG
21-11-2009, 08:47
cmq preferisco usare la modalitá disconnessa e poi usare le LinqDataSetExtensions :)

Mmm, modalità disconnessa per estrarre un solo record ? Non vedo questa gran necessità...

Kralizek
21-11-2009, 09:09
Mmm, modalità disconnessa per estrarre un solo record ? Non vedo questa gran necessità...

ops scusa, era tardi e non ho letto tutto...

ps: Frykky suka! :Prrr:

(sperando che sia il Frykky di TGM, sennò mi acchiappo un ban per direttissima :P)

Frykky
22-11-2009, 16:57
krallo culo :Prrr:

Altra domandina se io ho una datagridview e inserisco una nuova riga qual'è l'evento da intercettare per chiamare il metodo Update?
Ho provato
validating
validated
rowvalidating
rowchange


nulla...

per ora salvo le modifiche solo facendo closing del form (non ho bottoni nè nulla) ma non è molto corretto perchè se c'è un errore l'utente è costretto a uscire e rientrare

Kralizek
22-11-2009, 16:58
sei pessimo, hai fatto copia e incolla da msn! :mc:

Frykky
22-11-2009, 17:15
sei pessimo, hai fatto copia e incolla da msn! :mc:

:ciapet:

Frykky
26-11-2009, 08:48
piccolo uppetino!

MarcoGG
26-11-2009, 08:56
RowValidated oppure RowsAdded, a seconda della necessità... ;)