有没有更好的方法将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())
}
答案 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 };