开发者

C# Handling Null Values

I have Custo开发者_运维百科merID declared as

int? CustomerID=null;

I am checking null values while reading DataReader

Id = reader["CustomerId"] is DBNull ? null :Convert.ToInt32(reader["CustomerID"]);

It is throwing

 Type of conditional expression cannot be determined because there 
  is no implicit conversion between '<null>' and 'int'

What is the problem with the Conversion?


I think you need to do it this way:

if(! reader.IsDBNull(reader.GetOrdinal("CustomerId"))
{
   Id = Convert.ToInt32(reader["CustomerID"]);
}
else
{
   Id = NULL;
}

You need to use the .IsDBNull method on the reader to determine ahead of time if a column is NULL - if it is, don't even read the value from the reader.


Change your conditon to

  reader["CustomerId"] ==  DBNull.Value


A ?: conditional expression cannot evaluate to two different types on the true and false condition. I think a cast (int?)null should work.


The problem (assuming that Id is declared properly) is that the conditional statement infers the result type from the true result. In your case, that type is null. It then will try to cast the second type to the same as the first...and there is no cast from int to null.

The solution is to cast the true expression to the desired type:

Id = reader["CustomerId"] == DBNull.Value ?
    (int?) null :
    Convert.ToInt32(reader["CustomerID"]);


Try this

Id = reader["CustomerId"] is DBNull ? (int?)null : Convert.ToInt32(reader["CustomerID"]);

the types of both parts of the ?: need to be explicit


What's happening is your code is incorrectly evaluating and trying to do the Convert function.

Its readding reader["CustomerId"] is DBNull which it isn't its really a DBNull.Value so then it attempts to do Convert.ToInt32("<null>") and crashes. You need to fix your if statement, and add a (int ?) cast.

It should be:

 Id = reader["CustomerId"] is DBNull.Value ? (int?) null :Convert.ToInt32(reader["CustomerID"]);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜