从sql reader解析nullable double值的更好方法

时间:2017-06-14 14:56:32

标签: c#

有没有更好的方法将SqlDecimal从SqlDataReader解析为双倍?

class test {
    public double? Qte { get; set; }
}

SqlDataReader reader = cmd.executeReader();
reader.Read();

test t = new test() {
    Qte = (reader["DL_Qte"] == DBNull.Value) ? (double?)null : double.Parse(reader["DL_Qte"].ToString())
}

2 个答案:

答案 0 :(得分:3)

以下是我的方式:

double d = reader.GetFieldValue<double>(reader.GetOrdinal("DL_Qte"));

GetFieldValue<T>仅在.NET 4.5之后可用,因此您也可以这样做:

double d = reader.GetDouble(reader.GetOrdinal("DL_Qte"));

修改

要解决nullable和DB null的问题,你可以这样做:

int columnIndex = reader.GetOrdinal("DL_Qte");

double? d = !reader.IsDBNull(columnIndex) ? 
    reader.GetFieldValue<double>(columnIndex) : new double?();

答案 1 :(得分:1)

如果它是数据库中的小数或金额,为什么不在模型中将其存储为十进制?您也不应该将decimal解析为string,然后解析为double,请使用right method

class Test {
    public decimal? Qte { get; set; }
}

...

int columnIndex = reader.GetOrdinal("DL_Qte");
decimal? qte = null;
if(!reader.IsDBNull(columnIndex))
    qte = reader.GetDecimal(columnIndex);  // <----- !!!
Test t = new Test { Qte = qte };