In .NET nullable data types are data types that can be set to a null reference or, in VB.NET terms, Nothing. They can either contain a value or have no value at all. Reference data types, like strings and classes, are nullable. However, Value types, such as integers and dates, are not nullable. If you set a value type to Nothing the result is a default value such as 0 for numeric types or #1/1/0001 12:00:00 AM# for dates.

As you can probably guess, there may be times when you will need to have value data types that can be Null/Nothing. For example, a database column of date values could be Null in the database and you want your class to reflect this situation. In the .NET Framework 2.0, we have the Nullable class and the Nullable structure that allows us to add the ability to have a value of Nothing to an underlying value type.

In practice, we will want to use the Nullable structure since it supports Generics and thus allows you to define a specific data type. This gives you greater type safety and it’s easier to work with.

To start things off, let’s create a fragment of a class that uses a Nullable structure as a property.

In this example, we have an order shipped on date value. Since we will want the order in the system prior to shipping it out the door, the value in our database will be Null until this event happens. We don’t want to hard code values like this in several places in our application…

…we’ll get an error. This is because we’re still dealing with a structure, not a class. Here’s what our code should look like:

IfNot CurrentOrder.OrderShippedOn.HasValue Then
dtpOrderShipDate.Value = Now
Else
dtpOrderShipDate.Value = CurrentOrder.OrderShippedOn.Value
End If

The HasValue property returns a Boolean value that lets us know if there is a value or not. Then, when we want to retrieve the value to load it into a Date Time Picker control, we use the Value property. This allows us to return the correct type for the control. You can’t use = or Is to compare a Nullable type, you have to use the HasValue or Value properties.

Loading Nulls from the Database

Now let’s look at how we should load our object from our database. In this example, we’re assuming that we’re loading our object from a DataRow.

If orderDataRow.Item("ShipDate") Is DBNull.Value Then
_orderShippedOn = NothingElse
_orderShippedOn = CType(orderDataRow.Item("InventoryDate"), Date)
End If

We have to check for a Null value since we can’t convert a DBNull to a Date.

That’s it for this introduction to Nullable types. I hope you’ve found it useful. Let me know if you have any questions, additions, or corrections by leaving me a comment.

Share This Article:These icons link to social bookmarking sites where readers can share and discover new web pages.