从 sql 读取器解析可为空的双精度值的更好方法



有没有比这更好的方法将 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 };

最新更新