Eccezione InvalidCastException quando si fa riferimento il valore di un oggetto DataColumn č NULL

Traduzione articoli Traduzione articoli
Identificativo articolo: 310371 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo si riferisce ai seguenti spazi dei nomi delle librerie di classi di Microsoft .NET Framework:
  • System.Data
  • System.Data.SqlClient
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

Quando si fa riferimento il valore di un DataColumn č NULL, tipizzato o non tipizzato, si riceve un'eccezione.

Per il DataSet tipizzati, verrā visualizzato l'eccezione seguente:
Eccezione non gestita di tipo 'System.Data.StrongTypingException' in invalidcast.exe
Informazioni aggiuntive: Impossibile ottenere il valore perché č DBNULL.
Per il DataSet non tipizzato, verrā visualizzato l'eccezione seguente:
Eccezione non gestita di tipo 'System.InvalidCastException' in microsoft.visualbasic.dll
Ulteriori informazioni: cast dal tipo 'DBNULL' nel tipo 'String' non valido.

Cause

Causa 1

Quando si utilizza un DataSet di tipizzato, l'eccezione si verifica quando si fa riferimento il valore della colonna č NULL.

Causa 2

Quando si utilizza un DataSet di non tipizzato, il valore della colonna č NULL, e la variabile a cui viene assegnata non supporta NULL.

Risoluzione

Causa 1

Verificare la colonna NULL prima di accedere il valore. In non tipizzato DataSet , utilizzare il metodo di DataRow.IsNull . In un tipo DataSet , utilizzare la proprietā di DataRow.IscolumnnameNull .

Causa 2

Utilizzare una variabile di un tipo di dati appropriato che NULL č possibile memorizzare.

Status

Questo comportamento legato alla progettazione.

Informazioni

Procedura per riprodurre il problema.

  1. Avviare Microsoft Visual Studio .NET.
  2. Creare un nuovo progetto applicazione Windows in Visual Basic NET.. In base all'impostazione predefinita verrā aggiunto al progetto il Form1.
  3. Assicurarsi che il progetto contenga un riferimento allo spazio dei nomi System.Data .
  4. Inserire un controllo pulsante sul Form1.
  5. Modificare la proprietā nome del pulsante btnUntype e la proprietā Text Untype .
  6. Utilizzare l'istruzione di importazioni dello spazio dei nomi System e dello spazio dei nomi System.Data , in modo che non sia necessario qualificare dichiarazioni in tali spazi dei nomi pių avanti nel codice. Aggiungere il codice riportato di seguito alla sezione "General Declarations" di Form1:
       Imports System
       Imports System.Data
       Imports System.Data.SqlClient
    					
  7. Aggiungere il codice riportato di seguito nell'evento btnUntype :
            Dim str As String
            Dim ds As New DataSet()
            Dim r As DataRow
            Dim con As New SqlConnection("server=myserver;integrated security=sspi;database=northwind")
            Dim da As New SqlDataAdapter("select * from customers where customerid='ANTON'", con)
            da.Fill(ds, "customer")
            r = ds.Tables(0).Rows(0)
            'Uncomment to check for Null. 
            'If r.IsNull("fax") Then
            '   MessageBox.Show("Value is Null")
            'End If
            str = r("fax") 'Comment line to check for Null.
            MessageBox.Show(str) 'Comment line to check for Null.
            
    					
  8. Modificare la stringa di connessione (myserver) come nome del server appropriato per il proprio ambiente.
  9. Salvare il progetto. Nel menu debug , fare clic su Start per eseguire il progetto.
  10. Fare clic su Untype . Si noti l'eccezione precedente indicato per un DataSet di non tipizzato.
  11. Rimuovere il commento l'istruzione IF , e quindi commento le righe sotto l'istruzione IF per verificare la presenza di NULL.
  12. Salvare il progetto. Dal menu debug , fare clic su Start ed eseguire il progetto. Si noti che nella casella di messaggio visualizzato "Null valore č".
  13. Inserire un altro controllo Button in Form1.
  14. Modificare la proprietā nome del pulsante btntype e la proprietā di testo al tipo .
  15. Consente di creare un DataSet di tipizzato utilizzando il comando della tabella customers del database Northwind. Rinominare SQLDataAdapter sqlda .
  16. Aggiungere il codice riportato di seguito all'evento btntype :
            sqlda.Fill(DataSet11)
            Dim str As String
            Dim int As Integer
            Dim cust As DataSet1.CustomersRow
            cust = DataSet11.Customers.Rows(0)
            'Uncomment to catch null values.  
            'If cust.IsFaxNull Then
            '    MessageBox.Show("Value is Null")
            'End If
            str = cust.Fax() 
            MessageBox.Show(str)
            '    Comment line to check for Null.
    					
  17. Eseguire l'applicazione e quindi fare clic sul pulsante tipo . Si noti l'eccezione.
  18. Rimuovere il commento il blocco If... Then di codice, e quindi commento le ultime due righe di codice.
  19. Salvare l'applicazione, quindi eseguire l'applicazione e osservare la finestra di messaggio.

Riferimenti

Per ulteriori informazioni sulla creazione di un DataSet tipizzato, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
315678Come creare, utilizzare DataSet tipizzato in Visual Basic .NET
Per ulteriori informazioni su ADO.NET, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
313590Guida di orientamento per ADO.NET

Proprietā

Identificativo articolo: 310371 - Ultima modifica: martedė 27 febbraio 2007 - Revisione: 2.7
Le informazioni in questo articolo si applicano a:
  • Microsoft ADO.NET 2.0
  • Microsoft ADO.NET (included with the .NET Framework)
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
Chiavi: 
kbmt kbprb kbsystemdata KB310371 KbMtit
Traduzione automatica articoli
Il presente articolo č stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non č sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pių o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non č la sua. Microsoft non č responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 310371
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com