有没有比这更好的方法将 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())
}
这是我的做法:
double d = reader.GetFieldValue<double>(reader.GetOrdinal("DL_Qte"));
GetFieldValue<T>
仅在 .NET 4.5 之后可用,因此您也可以执行以下操作:
double d = reader.GetDouble(reader.GetOrdinal("DL_Qte"));
编辑:
要解决您遇到的可为空和数据库为空的问题,您可以执行以下操作:
int columnIndex = reader.GetOrdinal("DL_Qte");
double? d = !reader.IsDBNull(columnIndex) ?
reader.GetFieldValue<double>(columnIndex) : new double?();
如果它是数据库中的十进制或金钱,为什么不将其存储在模型中的十进制中?您也不应该解析decimal
string
然后double
,使用正确的方法:
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 };