Nullable types are a new feature to .NET 2.0, where they can
make any value type support null values. By defining a value type with a
question mark after it (in C#), or using the Nullable<T> class (in
VB.NET), the value type can support nulls simply by assigning null to it.
Nullable types add two additional members to it: the Value property and the
HasValue property. HasValue determines whether the nullable value actually has
a value, because if the Value property (which represents the actual value) is
accessed before being assigned a value, an exception is raised.
However, a nullable type is still an instance of the value
type (int? or Nullable(Of Int32)) is still a value of type int), and isn't
meant to represent or handle DBNull objects. Although when using the table
adapter feature of .NET 2.0 nullable types are used, they cannot handle DBNull,
because of what is described in the next section.