SqlDataReader错误:和& # 39;小数# 39;

本文关键字:小数 错误 null SqlDataReader | 更新日期: 2023-09-27 18:13:57

我正在开发一个c#桌面应用程序,有一个关于如何使用SqlDataReader从数据库检索值的问题。当值是表中的varchar时,我使用以下命令将该值保存在实体中:

if (dr.HasRows){
    while (dr.Read()){
    Empleado dato = new Empleado();
    dato.DUIEmp = dr.IsDBNull(0) ? "No Info" : dr.GetString(0);
    ...

,但我不知道如何从数据库检索一个十进制值,目前我使用这个,但不工作:

dato.Salario = dr.IsDBNull(4) ? (decimal?)null : Convert.ToDecimal(dr.GetDecimal(4)); 

日期值

也有同样的问题
dato.FechaIngreso = dr.IsDBNull(6) ? "No Info" : dr.GetDateTime(6);

你能帮帮我,告诉我我该如何使用SqlDatareader检索这些类型的数据吗?

SqlDataReader错误:<null>和& # 39;小数# 39;

如果类EmpleadoSalario属性声明为Decimal(不可为空的十进制),那么您应该检索您的值,在null的情况下分配默认值(就像您正在做的字符串字段)

dato.Salario = dr.IsDBNull(4) ? default(decimal) : dr.GetDecimal(4); 

还请注意,调用GetDecimal并不也需要Convert。ToDecimal

所以,如果你有其他日期类型你可以使用同样的方法,

dato.FechaIngreso = dr.IsDBNull(6) ? default(DateTime) : dr.GetDateTime(6);

默认情况下,decimalDateTime不为空。因此,在声明SalarioFechaIngreso属性的类中,将它们设置为空;

decimal? Salario {get;set;}
DateTime? FechaIngreso {get;set;}

如果你的类已经是:

decimal? Salario {get;set;}
DateTime? FechaIngreso {get;set;}

:

null as decimal?