DevTrain Startseite Advanced Developers Conference vom 14.-15. Februar 2011  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren


   Autor: Hannes Preishuber Artikel Drucken
        
Null und Nichts in .NET

Was ist wenn nichts ist? Eigentlich doch kein Problem oder? Mitnichten!

Das Handling von Null Werten ist in .NET mit ein paar Haken und Ösen versehen.

Objekte
Wenn ein Objekt dimensioniert ist, aber keine Instanz erzeugt ist, ist dies nichts. Nicht wird in diesem Falle durch nothing repäsentiert. Ein Vergleich mit Nothing ist zulässig. Alternativ gibts auch die Funktion isnothing()
Dim myobj as object
if myob=nothing then ....
if isnothing(myobj) then ...

Null in Database
Kompliziert wird es erst wenn in Tabellen Felder Null Werte zulassen. Hier ist der Vergleich  mit nothing nicht zulässig. Es gibt allerdings einen eigenen Datentyp für diesen Zweck: DBNull. Wenn Sie also mit einem Datareader auf ein Feld zugreifen indem nichts steht, wird im Direkt Fenster von Visual Studio folgendes ausgegeben.

?DR.Item("company")
{System.DBNull}

Zum Problem wird dies, wenn Sie diesen Wert einer Textbox zwecks Anzeige zuweisen wollen. Zunächst können Sie über cstr oder CType sicherstellen, das auch ein String geliefert wird.
txtCompany.Text = CStr(DR.Item("company"))

Wenn aber ein NUll in der Datenbank steht wird Ihnen folgende Fehlermeldung um die Ohren fliegen.

Cast from type 'DBNull' to type 'String' is not valid.

Auch ein CType hilft nicht.
txtName.Text = CType(DR.Item("name"), String)

    
Einzig mit der Funtkion isDBNULL lässt sich feststellen ob das Feld Null enthält. Dazu muss einmal iSDBNull aufgerufen werden und dann noch der eigentliche Wert geholt werden.
If IsDBNull(DR.Item("company")) = False Then
            txtCompany.Text = CType(DR.Item("company"), String)
End If

Noch viel härter ist das zuweisen von Null Werten. Zunächst ganz einfach mit dem Datentyp das Feld beschreiben.

Zuweisen
r("FirstName") = System.DBNull.Value

Was aber wenn die Daten aus einem Eingabeformular kommen? Dann soll wenn in der Textbox nichts steht auch Null in das Feld. In diesem Beispiel verwenden wir einen Stringbuilder für das zusammenstellen des SQL Kommandos. Für jedes Feld muss folgender Codeblock eingebaut werden.

....
If txtName.Text = "" Then
            SQL.Append("name = null")
        Else
            SQL.Append("name='")
            SQL.Append(txtName.Text)
            SQL.Append("'")

End If

An dieser Stelle kann nur empfohlen werden andere Wege zu gehen. So bietet das Dataset eine komfortable Möglichkeit über den CommandBuilder das coding zu minimierien.


DevTrain Camp - Schneller zum .NET 3.5 Developer
 
Verwandte Artikel      Verlinkte Dokumente
    Keine verknüpften Dokumente
    Keine Links vorhanden

  Erfasst am: 10.04.2002
  Gültig bis: 10.05.2002
13 Ratings
Bewertung: 78,5%
schlecht    sehr gut  

 
© Copyright 2007 ppedv AG