InvalidCastException-Ausnahme, wenn Sie den Wert des DataColumn verweisen, die NULL ist

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 310371 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel bezieht sich auf die folgenden Namespaces für Microsoft .NET Framework-Klassenbibliotheken:
  • System.Data
  • System.Data.SqlClient
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Wenn Sie den Wert des DataColumn , die NULL, ob typisierten oder nicht typisiert ist verweisen, erhalten Sie eine Ausnahme ausgelöst.

Für typisierte DataSets sinngemäß die folgende Ausnahme:
Eine nicht behandelte Ausnahme des Typs 'System.Data.StrongTypingException' ist in invalidcast.exe aufgetreten
Weitere Informationen: kann nicht Wert abgerufen, da er DBNULL ist.
Für nicht typisierte DataSets sinngemäß die folgende Ausnahme:
Eine nicht behandelte Ausnahme des Typs 'System.InvalidCastException' ist in microsoft.visualbasic.dll aufgetreten
Weitere Informationen: Umwandlung von Typ 'DBNULL' Typ 'String' ist ungültig.

Ursache

Ursache 1

Wenn Sie ein typisiertes DataSet verwenden, wird die Ausnahme verursacht, wenn Sie den Wert in der Spalte verweisen, der NULL ist.

Ursache 2

Wenn Sie ein nicht typisiertes DataSet verwenden, der Wert der Spalte ist NULL und die Variable, die Sie zuweisen, NULL nicht unterstützt.

Lösung

Ursache 1

Testen Sie die Spalte auf NULL, bevor Sie seinen Wert zugreifen. Verwenden Sie die DataRow.IsNull -Methode, in ein nicht typisiertes DataSet . Verwenden Sie die DataRow.IscolumnnameNull -Eigenschaft, in ein typisiertes DataSet .

Ursache 2

Verwenden einer Variable einen geeigneten Datentyp, der NULL speichern kann.

Status

Es handelt sich hierbei um ein beabsichtigtes Verhalten.

Weitere Informationen

Schritte zum Reproduzieren des Verhaltens

  1. Starten Sie Microsoft Visual Studio .NET.
  2. Erstellen Sie in Visual Basic .NET ein neues Windows-Anwendungsprojekt. Dem Projekt wird standardmäßig "Form1" hinzugefügt.
  3. Stellen Sie sicher, dass das Projekt einen Verweis auf den System.Data -Namespace enthält.
  4. Platzieren Sie ein Button -Steuerelement auf Form1.
  5. Ändern Sie die Name -Eigenschaft der Schaltfläche in BtnUntype und die Text -Eigenschaft in Untype .
  6. Verwenden Sie die Imports -Anweisung im System -Namespace und den System.Data -Namespace, damit Sie keine Deklarationen in diesen Namespaces später im Code vornehmen müssen. Fügen Sie im Abschnitt "Allgemeine Deklarationen" des Form1 den folgenden Code:
       Imports System
       Imports System.Data
       Imports System.Data.SqlClient
    					
  7. Fügen Sie den folgenden Code in das BtnUntype -Ereignis:
            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. Ändern Sie die Verbindungszeichenfolge (Myserver) als Namen für Ihre Umgebung geeigneten Server.
  9. Speichern Sie Ihr Projekt. Klicken Sie im Menü Debuggen auf Starten , um das Projekt auszuführen.
  10. Klicken Sie auf Untype . Beachten Sie, die früher erwähnten Ausnahme für ein nicht typisiertes DataSet .
  11. Kommentieren Sie die Wenn -Anweisung, und kommentieren Sie die Zeilen unterhalb der IF -Anweisung zu prüfen, NULL.
  12. Speichern Sie Ihr Projekt. Im Menü Debuggen klicken Sie auf Start , und führen Sie dann das Projekt. Beachten Sie, dass das Meldungsfeld "Wert ist NULL" angezeigt wird.
  13. Platzieren Sie eine andere Schaltfläche -Steuerelement auf Form1.
  14. Ändern Sie die Name -Eigenschaft der Schaltfläche auf Btntype und die Text -Eigenschaft auf .
  15. Erstellen Sie ein typisiertes DataSet mithilfe der Customers-Tabelle in der Northwind-Datenbank. Benennen Sie die SQLDataAdapter Sqlda .
  16. Fügen Sie das Btntype -Ereignis den folgenden Code:
            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. Führen Sie die Anwendung, und klicken Sie dann auf die Typ -Schaltfläche. Beachten Sie die Ausnahme.
  18. Kommentieren Sie der If... Then Codeblock, und kommentieren Sie die letzten beiden Zeilen Code.
  19. Speichern Sie die Anwendung und führen Sie dann die Anwendung aus, und beachten Sie das Meldungsfeld.

Informationsquellen

Weitere Informationen zum Erstellen eines typisierten Datasets finden Sie im folgenden Artikel der Microsoft Knowledge Base:
315678Wie erstellen, verwenden typisiertes DataSet mithilfe von Visual Basic .NET
Weitere Informationen zu ADO.NET finden Sie im folgenden Artikel der Microsoft Knowledge Base:
313590Wegweiser für ADO.NET

Eigenschaften

Artikel-ID: 310371 - Geändert am: Dienstag, 27. Februar 2007 - Version: 2.7
Die Informationen in diesem Artikel beziehen sich auf:
  • 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
Keywords: 
kbmt kbprb kbsystemdata KB310371 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 310371
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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