|
|
A Unit of Aim Clear Technologies Ltd.
Advertise with us
 |
|
|
Page 1 of 1
|
[ 1 post ] |
|
sreenath
Super Moderator
Joined:
Wed Aug 26, 2009 10:01 pm
Beans: 1,227
In Bank: 14665
College: ESEC
Degree: M.Sc
Department: CSE
State: TN
Fav Quote: no pain no gain
|
|
Sat Oct 03, 2009 2:52 pm
|
Post subject: Handling Null values
How is an easy way to guarantee the Nulls do not cause my program to raise an exception? Nulls can be the bane of the database programmer who does not plan for the inevitable Null value in a data set.
Obviously, the best way to ensure that unexpected Null values do not surprise you in a dataset is to impose validation rules in the database. However, it has been my sad experience to have exceptions raised by Null values when I had been ensured that they could not happen.
The following example code shows how to call three functions that I have written to automatically return a valid value (default according to datatype), even if the value retrieved from the database is Null. Assuming that DT is a DataTable with string, integer, and decimal values in it, the code shown below will not fail, even if Null values are encountered.
myString = MNS(dt.Rows(0).Item("string_field") myInteger = MNI(dt.Rows(0).Item("integer_field") myDecimal = MND(dt.Rows(0).Item("decimal_field")
The function calls will always return default, non Null values, even if the value returned in the datatset is Null. This may or may not mean that the program is performing correctly, depending on the requirement for the presence of valid data in the database field. However, it does guarantee that the program will not be caught off guard by the appearance of a Null value in the table.
A normal way to protect against this is shown below and is obviously much more cumbersome and mistake prone. Two ways are demonstrated, neither of which is desirable from my point of view. Obviously, they will run faster than the function calls shown above, but with the speed of today's computers, I maintain that conserving the time of the developer is much more important than worrying about a few machine cycles.
If dt.Rows(0).Item("string_field") Then myString = String.Empty Else mystring = CType(dt.Rows(0).Item("string_field") End If
myString = IIf(IsDBNull(dt.Rows(0).Item("string_field")), _ String.Empty, dt.Rows(0).Item("string_field"))
The code for the three functions is shown below in both VB and C#. You can take the development of other functions further yourself. A date function is needed, but the development of that function or functions will depend on what you want to return in the case of a Null date value. VB.Net Code:
' Return 0 if object is null, else decimal value Public Function MND(ByVal o As Object) As Decimal If IsDBNull(o) Then Return 0 Else Return CType(o, Decimal) End If End Function ' Return 0 if null, else integer value of object. Public Function MNI(ByVal i As Object) As Integer If IsDBNull(i) Then Return 0 Else Return CType(i, Integer) End If End Function
''' Return String if object is not null, else return empty.string Public Function MNS(ByVal s As Object) As String If IsDBNull(s) Then Return String.Empty Else Return CType(s, String) End If End Function
C# Code:
// return default value for integer if the object is null public int MNI(object i) { if(i==null) return 0; else return (int) i; }
// return default value for decimal if the object is null public decimal MND(object o) { if(o==null) return 0; else return (decimal) o; }
// return empty string if the object is null public string MNS(object s) { if(s==null) return string.Empty; else return (string) s; }
_________________ sreenath@myanna.in
|
|
|
|
|
Page 1 of 1
|
[ 1 post ] |
|
Bookmark & Share
Who is online |
Users browsing this forum: No registered users and 0 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|

| |