PC Review
Forums
Newsgroups
Microsoft DotNet
Microsoft ADO .NET
Specified cast is not valid, when column returns NULL
Forums
Newsgroups
Microsoft DotNet
Microsoft ADO .NET
Specified cast is not valid, when column returns NULL
![]() |
Specified cast is not valid, when column returns NULL |
|
|
Thread Tools | Rate Thread |
|
|
#1 |
|
Guest
Posts: n/a
|
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 ! |
|
|
|
#2 |
|
Guest
Posts: n/a
|
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 ! |
|
|
|
#3 |
|
Guest
Posts: n/a
|
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); } |
|
|
|
#4 |
|
Guest
Posts: n/a
|
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. |
|
|
|
#5 |
|
Guest
Posts: n/a
|
"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 |
|
|
|
#6 |
|
Guest
Posts: n/a
|
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. > |
|
![]() |
|
| Thread Tools | |
| Rate This Thread | |
|
|

Main Page 

