您好我正在使用mvc示例从数据库中获取数据。这里我得到了一个错误
异常详细信息:System.InvalidOperationException:'number' 'Employee'上的属性无法设置为'System.Decimal'值。 您必须将此属性设置为类型的非null值 'System.Double'。
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
请在此处查看我的代码,我收到了上述错误。
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 }
);
}
答案 0 :(得分:11)
我认为可能是因为null值转换尝试存储在double中。
将double
更改为
double?
有关说明,请参阅以下链接: http://msdn.microsoft.com/en-us/library/2cf62fcy.aspx
谢谢!
答案 1 :(得分:8)
这可能是DB的问题,从我的经验来看,我得到了这个例外,因为我使用了store-procedure中的数据(使用实体框架生成对象类)
我的SP中的一个数字字段我提供了这样的数据合同
CAST(NULL AS DECIMAL) AS UnitAmount
所以在我的代码中(在实体框架生成类之后)我得到了包含
的类Decimal UnitAmount{get;set;}
但是当我运行我的代码时会发生此错误
...无法设置为System.Int32'值。您必须设置此属性 到类型为' System.Decimal'的非空值。
它是因为在我的SP中有一个案例条件,我返回我的结果,因此数据类型返回不匹配。
-- if no data
Select ... ,
0 as UnitAmount,
....
如果你没有投射/转换结果 0 - >它将被视为Int32(0.00->看作十进制,)
答案 2 :(得分:5)
答案 3 :(得分:1)
在我的情况下,视图存在问题,当存在空值时返回值。
像“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
现在全部工作......
答案 4 :(得分:1)
在我的情况下,问题出在错误的DB列类型 - numeric ,属性 long 。所以我只需要将列重新创建为 bigint 。
答案 5 :(得分:0)
我遇到了类似的问题,说“无法设置为'Decimal'值。您必须将此属性设置为'Int32'类型的非null值。”一列。我搜索了解决方案,发现我在解决方案中将此列设置为Int。但在数据库中,它被设置为钱,而不是int。所以我在数据库级别更改了它。它有效。
答案 6 :(得分:0)
我遇到的情况是我无法更改表中列的类型(大项目,很多依赖项)。
我有一个View将数据输入到类定义中,类似于:
SELECT Name,Phone,ID FROM People
这里,我的ID是int类型,但是被用作类型字符串。为了解决这个问题,我改为构建我的View:
SELECT Name, Phone, CONVERT(NVARCHAR(2), ID) AS ContactMethodTypeId FROM People
将CONVERT放在有问题的类型周围,它将返回指定的类型。就我而言,NVARCHAR。
答案 7 :(得分:0)
SQL中的小数与.Net中的小数不同。如果查看SqlDbType枚举表,您会发现SQL十进制等效于double类型。
浮子>双。浮点数在-1.79E +308到1.79E +308的范围内。
public double? number { get; set; }
答案 8 :(得分:0)
就我而言,从float更改了代码?加倍? & 有用。
public double? number { get; set; }
我的数据库表列类型为float。