PC Review Forums Newsgroups Microsoft DotNet Microsoft ADO .NET Specified cast is not valid, when column returns NULL

Reply

Specified cast is not valid, when column returns NULL

 
Thread Tools Rate Thread
Old 06-04-2006, 01:30 AM   #1
Web learner
Guest
 
Posts: n/a
Default Specified cast is not valid, when column returns NULL


while (dr.Read())
//dr is an instance of sqlDataReader
{
double minAirTemp = (double)(Single)dr["minAirTemp"];
// minAirTemp is column in SQLExpress table (data type: real, allows nulls)
}

The above code works. But when there are NULL, I get the following error
System.InvalidCastException: Specified cast is not valid

To solve this problem, I spent a day on Google. Finally I got a hint from http://www.codeproject.com/cs/database/SmartReader.asp and replaced the code line in while{} as follows:

double minAirTemp1 = (dr.IsDBNull(dr.GetOrdinal("minAirTemp1")))
? 9999 : double.Parse(dr["minAirTemp1"].ToString()); //9999 to respresent nulls

This works for me for now. But just wondering, whether there is a better method to deal with such a situation????

Can someone be kind to point me to some suitable reference !

Thanks !


  Reply With Quote
Old 06-04-2006, 01:41 AM   #2
Jim Hughes
Guest
 
Posts: n/a
Default Re: Specified cast is not valid, when column returns NULL

VS2005 has a double.TryParse

If the TryParse failes, then set the value to DBNull.Value
"Web learner" <beginner@learning.edu> wrote in message
news:uWdFHFRWGHA.1192@TK2MSFTNGP04.phx.gbl...
while (dr.Read())
//dr is an instance of sqlDataReader
{
double minAirTemp = (double)(Single)dr["minAirTemp"];
// minAirTemp is column in SQLExpress table (data type: real, allows
nulls)
}

The above code works. But when there are NULL, I get the following error
System.InvalidCastException: Specified cast is not valid

To solve this problem, I spent a day on Google. Finally I got a hint from
http://www.codeproject.com/cs/database/SmartReader.asp and replaced the code
line in while{} as follows:

double minAirTemp1 = (dr.IsDBNull(dr.GetOrdinal("minAirTemp1")))
? 9999 : double.Parse(dr["minAirTemp1"].ToString()); //9999 to respresent
nulls
This works for me for now. But just wondering, whether there is a better
method to deal with such a situation????
Can someone be kind to point me to some suitable reference !
Thanks !


  Reply With Quote
Old 06-04-2006, 01:46 AM   #3
Flinky Wisty Pomm
Guest
 
Posts: n/a
Default Re: Specified cast is not valid, when column returns NULL

I have a big class called SqlHelper full of methods like:

public static decimal GetReaderDecimal(IDataRecord dr, int column,
decimal ifNull)
{
return dr.IsDBNull(column)? ifNull : dr.GetDecimal(column);
}

  Reply With Quote
Old 06-04-2006, 04:46 AM   #4
Bruce Wood
Guest
 
Posts: n/a
Default Re: Specified cast is not valid, when column returns NULL

I did roughly the same thing in C# 1.1: write a static helper method to
which you pass the row, the column name, and the default value, and it
returns the value. I had one for each primitive type, including one for
strings.

In C# 2.0 there are nullable types, but I'm not sure how they are at
mediating between DbNull and null.

  Reply With Quote
Old 06-04-2006, 07:18 AM   #5
Martin Carpella
Guest
 
Posts: n/a
Default Re: Specified cast is not valid, when column returns NULL

"Bruce Wood" <brucewood@canada.com> writes:

> In C# 2.0 there are nullable types, but I'm not sure how they are at
> mediating between DbNull and null.


In C# 2.0 you can use the "as" operator in conjunction with nullable
types, e.g.:

IDataReader r = ...;
int? val = r["MyColumn"] as int?;

This will gracefully handle the case that r["MyColumn"] contains a
DbNull.

Best regards,
Martin
  Reply With Quote
Old 06-04-2006, 07:26 PM   #6
Web learner
Guest
 
Posts: n/a
Default Re: Specified cast is not valid, when column returns NULL

For a beginner like me,the whole scenario is overwhelmingly confusing. It is
hard to figure out what is legacy and what is cutting-edge elegant methods.

Can someone be kind to point out to latest tutorial material on this topic?
Please refer to my original messsage.

Thanks !


"Bruce Wood" <brucewood@canada.com> wrote in message .
>I did roughly the same thing in C# 1.1: write a static helper method to
> which you pass the row, the column name, and the default value, and it
> returns the value. I had one for each primitive type, including one for
> strings.
>
> In C# 2.0 there are nullable types, but I'm not sure how they are at
> mediating between DbNull and null.
>



  Reply With Quote
Reply



Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off