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检索这些类型的数据吗?
如果类Empleado
有Salario
属性声明为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);
默认情况下,decimal
和DateTime
不为空。因此,在声明Salario
和FechaIngreso
属性的类中,将它们设置为空;
decimal? Salario {get;set;}
DateTime? FechaIngreso {get;set;}
如果你的类已经是:
decimal? Salario {get;set;}
DateTime? FechaIngreso {get;set;}
:
null as decimal?