我使用SqlDataReader从SQL数据表中读取一些值。值为十进制,但调用也为null。我该如何分配?我已经尝试过这样,但是如果myValue为null,它会抛出“Specified cast is not valid”异常。
decimal? d= (decimal)myRdr["myValue"];
这样做的最佳方式是什么?
谢谢。
答案 0 :(得分:3)
这个怎么样?
decimal? d= myRdr["myValue"] == DBNull.Value ? null : (decimal?)myRdr["myValue"];
答案 1 :(得分:1)
试试这个:
decimal? d = myRdr["myValue"] != DBNull.Value ? (decimal)myRdr["myValue"] : null;
答案 2 :(得分:1)
这应该有效:
decimal? d = myRdr["myValue"] == DBNull.Value ? null : decimal.Parse(myRdr["myValue"].ToString());
答案 3 :(得分:0)
decimal? d = myRdr[columnName] as decimal?;
以上,在扩展方法中:
public static decimal? GetNullableDecimal(this SqlDataReader myRdr, string columnName, decimal? valueIfNull = null)
{
return myRdr[columnName] as decimal? ?? valueIfNull;
}
用法:
decimal? d = myRdr.GetNullableDecimal("myValue");
decimal? d = myRdr.GetNullableDecimal("myValue", valueIfNull: 0);
脚注
声明。我只读过这个,没有测试过它:" as"据说,施法比前缀(显式)施法快5倍:http://gen5.info/q/2008/06/13/prefix-casting-versus-as-casting-in-c/