繁体   English   中英

无法设置为'System.Decimal'值。 您必须将此属性设置为类型为“System.Double”的非null值

[英]could not be set to a 'System.Decimal' value. You must set this property to a non-null value of type 'System.Double'

您好我正在使用mvc示例从数据库中获取数据。 我在这里得到了一个错误

异常详细信息:System.InvalidOperationException:'Employee'上的'number'属性无法设置为'System.Decimal'值。 您必须将此属性设置为类型为“System.Double”的非null值。

描述:执行当前Web请求期间发生未处理的异常。 请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

请在这里查看我的代码,我收到了上述错误。

public ActionResult Details(int id)
{
    EmployeeContext empcon = new EmployeeContext();
    Employee employ = empcon.employees.Single(emp => emp.empid == id);
    return View(employ);
}

Routiconfig

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    RouteTable.Routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "emp", action = "Details", 
                        id = UrlParameter.Optional }
        );
}

我认为这可能是因为null值转换尝试存储在double中。

将你的double改为

double?

有关说明,请参阅以下链接: http//msdn.microsoft.com/en-us/library/2cf62fcy.aspx

谢谢!

这可能是DB的问题,从我的经验来看,我得到了这个例外,因为我使用了store-procedure中的数据(使用实体框架生成对象类)

在我的SP中的一个数字字段我提供这样的数据合同

CAST(NULL AS DECIMAL) AS UnitAmount

所以在我的代码中(在实体框架生成类之后)我得到了包含的类

Decimal UnitAmount{get;set;}

但是当我运行我的代码时,会发生此错误

...无法设置为'System.Int32'值。 您必须将此属性设置为类型为“System.Decimal”的非null值。

这是因为在我的SP中有一个案例条件,我返回我的结果,所以数据类型返回不匹配。

-- if no data
Select ... ,
       0  as UnitAmount, 
       ....

如果你没有转换/转换结果0 - >它将被视为Int32(0.00->被视为十进制,)

使用

public decimal number { get; set; } 

要么

public double number { get; set; }

链接

在我的情况下,问题是错误的DB列类型 - 这是数字和属性很 所以我只需要将列重新创建为bigint

在我的情况下,它是视图的问题,当存在空值时返回值。

有“ISNULL(dbo.STOCK_ITEMS.STDCOST,0)AS STDCOST”之类的东西

然后没有工作。

尝试“ISNULL(dbo.STOCK_ITEMS.STDCOST,0.0)AS STDCOST”

没有工作,但以下工作......

ISNULL(dbo.STOCK_ITEMS.STDCOST, 0.00) AS STDCOST

现在都在工作......

我遇到了类似的问题,说“无法设置为'Decimal'值。您必须将此属性设置为'Int32'类型的非null值。” 一列。 我搜索了解决方案,发现我在解决方案中将此列设置为Int。 但在数据库中,它被设置为钱,而不是int。 所以我在数据库级别更改了它。 它的工作原理。

我遇到的情况是我无法更改表中列的类型(大项目,许多依赖项)。

我有一个View将数据输入到Class定义中,类似于:

    SELECT Name,Phone,ID FROM People

这里,我的ID是int类型,但是被用作类型字符串。 为了解决这个问题,我改为构建了我的View:

    SELECT Name, Phone, CONVERT(NVARCHAR(2), ID) AS ContactMethodTypeId FROM People

只是将CONVERT放在有问题的类型周围,它将返回指定的类型。 就我而言,NVARCHAR。

SQL中的小数与.Net中的小数不同。 如果查看SqlDbType枚举表,您会发现SQL十进制等效于double类型。

来自C#参考文献

浮子>双。 浮点数在-1.79E +308到1.79E +308范围内。

public double? number { get; set; }

在我的情况下改变浮动代码? 加倍? & 有用。

 public double? number { get; set; }

我的数据库表列类型是float。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM