DevTrain .NET Developers Home. Das Community Portal für ASP.NET, Visual Basic, C#
 
  Login Status: Hallo   Anmelden  Suche:  
Navigationslinks überspringen
Startseite
Artikel
Blogs
Foren
ClubClub erweitern

 
Ihre Optionen
Save
Mail
Print
Rate
 
Advertising
  Business Intelligence Camp – Ihr schnellster Weg zu SSIS, SSAS und SSRS!

 
Navigationslinks überspringen
Autor:Hannes Preishuber

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.


Diskutieren Sie in den Foren

Business Intelligence Camp – Ihr schnellster Weg zu SSIS, SSAS und SSRS!