SqlDataReader错误:<null>和'decimal'之间没有转换

时间:2015-09-22 21:44:36

标签: c#

我正在开发一个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检索这些类型的数据?

3 个答案:

答案 0 :(得分:1)

如果类Empleado的{​​{1}}属性声明为Decimal(不可为十进制),那么你应该检索你的值,在null的情况下指定一个默认值(就像你在使用字符串字段一样) )

Salario

另请注意,调用GetDecimal也不需要Convert.ToDecimal

因此,如果您有其他日期类型,那么您可以使用相同的方法,

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

答案 1 :(得分:0)

默认情况下,valueLine[i+1]decimal不可为空。因此,在您声明了DateTimeSalario属性的类中,将这些属性设为可为空;

FechaIngreso

答案 2 :(得分:0)

如果您的课程已经上课:

**9/22/2015**
Article 3 (10 upvotes)
Article 1 (5 upvotes)
Article 2 (3 upvotes)
**9/21/2015**
Article 6 (3 upvotes)
Article 5 (2 upvotes)
Article 4 (1 upvote)

这样:

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