Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - DBNull VB.net
Forum - C# / VB.NET - DBNull VB.net

Avatar
clode87 (Normal User)
Newbie


Messaggi: 10
Iscritto: 07/06/2010

Segnala al moderatore
Postato alle 14:04
Mercoledì, 09/06/2010
ciao a tutti!

voglio testare se un dato del mio database è dbnull e uso la seguente sintassi:


            If (IsDBNull(eRow.DataAtt)) Then



            Else


            End If

dove erow è una riga del mio DB,

come risposta il programma salta a questa funzione che ha creato automaticamente:

      
        <Global.System.Diagnostics.DebuggerNonUserCodeAttribute()>  _
        Public Property DataScad() As Date
            Get
                Try
                    Return CType(Me(Me.tableLicenzaN.DataScadColumn),Date)
                Catch e As Global.System.InvalidCastException
                    Throw New Global.System.Data.StrongTypingException("Il valore della colonna 'DataScad' nella tabella 'LicenzaN' è DBNull.", e)
                End Try
            End Get
            Set
                Me(Me.tableLicenzaN.DataScadColumn) = value
            End Set
        End Property
il dataset è impostato con il comando di lanciare un'eccezione quando il valore è null, togliendo questo comando non mi compila più il progetto....

quindi che fare?

PM Quote
Avatar
the_angel (Normal User)
Expert


Messaggi: 471
Iscritto: 02/04/2009

Segnala al moderatore
Postato alle 15:17
Mercoledì, 09/06/2010
Testo quotato

Postato originariamente da clode87:


il dataset è impostato con il comando di lanciare un'eccezione quando il valore è null, togliendo questo comando non mi compila più il progetto....

quindi che fare?



Questa cosa non mi torna....che significa?

Che senso ha verificare e poi scatenare l'eccezione?

PM Quote
Avatar
clode87 (Normal User)
Newbie


Messaggi: 10
Iscritto: 07/06/2010

Segnala al moderatore
Postato alle 15:22
Mercoledì, 09/06/2010
perchè inizialmente il dato non ammetteva null.... ho usato il wizard per creare il database... quindi presumo che si sia autosettato così....

poi ho cambiato il tipo di dato( ho ammesso null) ma penso che sia restata l'eccezione.....

PM Quote
Avatar
the_angel (Normal User)
Expert


Messaggi: 471
Iscritto: 02/04/2009

Segnala al moderatore
Postato alle 16:09
Mercoledì, 09/06/2010
Testo quotato

Postato originariamente da clode87:

perchè inizialmente il dato non ammetteva null.... ho usato il wizard per creare il database... quindi presumo che si sia autosettato così....

poi ho cambiato il tipo di dato( ho ammesso null) ma penso che sia restata l'eccezione.....



Togli la funziona e allega una screenshot dell'errore...
questa cosa mi è nuova...

PM Quote
Avatar
clode87 (Normal User)
Newbie


Messaggi: 10
Iscritto: 07/06/2010

Segnala al moderatore
Postato alle 17:00
Mercoledì, 09/06/2010
risolto!:k::k::k:

utilizzando la fantastica funzione che autogenera nel caso in cui un campo può avere valo nullo!

    If (eRow.IsDataAttNull) Then



            Else


            End If

non so se sono io che ho pasticciato troppo con il dataset oppure è obbligatorio usare questa funzione per non fargli chiamare l'eccezione....
ma suppongo sia la seconda perchè senò crea una funzione per niente....8-|

PM Quote
Avatar
the_angel (Normal User)
Expert


Messaggi: 471
Iscritto: 02/04/2009

Segnala al moderatore
Postato alle 17:14
Mercoledì, 09/06/2010
Boh,io quando lavoro con i dataset...
li dichiaro, e gli butto dentro i risultati della query...

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 18:45
Sabato, 12/06/2010
A dire la verità il codice autogenerato è pessimo per quanto riguarda la gestione di DBNull. Sarebbe stato molto più elegante restituire un tipo Nullable che fosse Nothing nel caso la corrispondente colonna riportasse DBNull. Questo avrebbe evitato l'errore lanciato dalla proprietà e la necessità di scrivere una funzione Is[Nome]Null per ogni attributo.

Se ti va, puoi correggere:
Codice sorgente - presumibilmente VB.NET

  1. <Global.System.Diagnostics.DebuggerNonUserCodeAttribute()>  _
  2. Public Property DataScad() As Date?
  3.   Get
  4.      Try
  5.         Return CType(Me(Me.tableLicenzaN.DataScadColumn), Date)
  6.      Catch e As Global.System.InvalidCastException
  7.         Return Nothing
  8.      End Try
  9.   End Get
  10.   Set
  11.      Me(Me.tableLicenzaN.DataScadColumn) = value
  12.   End Set
  13. End Property


PM Quote