C# SqlDataReader错误:在<;空>;和';十进制';
我正在开发一个C#桌面应用程序,有一个关于如何使用SqlDataReader从数据库检索值的问题。 当值为表中的varchar时,我使用以下命令将该值保存在实体中:C# SqlDataReader错误:在<;空>;和';十进制';,c#,C#,我正在开发一个C#桌面应用程序,有一个关于如何使用SqlDataReader从数据库检索值的问题。 当值为表中的varchar时,我使用以下命令将该值保存在实体中: if (dr.HasRows){ while (dr.Read()){ Empleado dato = new Empleado(); dato.DUIEmp = dr.IsDBNull(0) ? "No Info" : dr.GetString(0); ... 但我不知道如何从数据库中检索十进制值
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检索这些类型的数据?默认情况下,
decimal
和DateTime
不可为空。因此,在声明了Salario
和FechaIngreso
属性的类中,将这些属性设置为null
decimal? Salario {get;set;}
DateTime? FechaIngreso {get;set;}
如果类
Empleado
将Salario
属性声明为Decimal(不可为null的Decimal),那么您应该检索您的值,并在null情况下指定一个默认值(就像您对字符串字段所做的那样)
还要注意,调用GetDecimal并不需要Convert.ToDecimal
因此,如果您有其他日期类型,那么您可以使用相同的方法
dato.FechaIngreso = dr.IsDBNull(6) ? default(DateTime) : dr.GetDateTime(6);
如果您的班级已经:
decimal? Salario {get;set;}
DateTime? FechaIngreso {get;set;}
这样:
null as decimal?
要在数据容器中容纳未分配的值,请使用可为空的字段:
decimal?
、DateTime?
、int?
等。谢谢。我做了小数点?Salario{get;set;}改变,这对我来说很好:dato.Salario=dr.IsDBNull(4)?(十进制?)null:Convert.ToDecimal(dr.GetDecimal(4));但是为什么它不能在字符串中工作,例如:公共字符串?名称我收到错误1类型“string”必须是不可为null的值类型,才能将其用作泛型类型或方法“System.nullable”中的参数“T”。。。顺便说一句,我正在将数据记录(许多Empleado实体)保存到IEnumerable类型string
已经是可空类型。无需使用string?
excelente。)m工作得很好,但是如果涉及到其他类型的数据,比如DateTime、double、float,该怎么办?我是否可以始终使用0m,还是应该使用另一个表达式,即0f(float)、0d(Datetime)…不,您需要使用适当的类型。或者更好地使用该类型的默认值。最新答案
null as decimal?