“System.UInt16”类型的对象无法转换为“System.Int16”类型

时间:2009-07-21 22:28:35

标签: asp.net-mvc subsonic subsonic3

为什么我遇到此错误“当我尝试在代码下运行时,无法将类型为'System.UInt16'的对象转换为'System.Int16'类型

 public ActionResult List()
 {
     var x = account.All();
     return View(x);
 }

当我尝试在List.aspx文件(代码下面)中迭代我的模型时出现错误。

  <% foreach (var item in Model) { %>

我正在使用Subsonic 3.0.3和MySQL数据库。以下是我的帐户表格说明

acc_id          smallint(5)        unsigned pri
acc_type        smallint(5)        unsigned
acc_status      tinyint(3)         unsigned
acc_balance     int(11)            unsigned

我是否必须修改MySQL.ttinclude中的内容才能使这个功能正常工作?

5 个答案:

答案 0 :(得分:1)

在不知道account.All()View(x)做什么的情况下,很难知道。如果您使用x的显式输入也会有所帮助。

我的猜测是,short而不是ushort的内容正在拆箱,但我们无法从这一段代码中得知。我假设这是一个例外而不是编译时错误?更多信息请!

答案 1 :(得分:0)

根据您提供的代码提供答案极其困难。您没有说明哪条线路出错或问题出在哪里。但是,检查C#中的Convert类,如果问题出在C#而不是你的DB或Subsonic上,那么我认为转换就可以了。

ushort num1 = some_number;

短号;

num2 = Convert.ToUInt16(num1);

然而,要理解这种转换的含义是非常困难的,你应该知道这可能会在以后破坏其他东西。

答案 2 :(得分:0)

我对SubSonic 3和MySQL有完全相同的问题 - 我能找到的唯一方法就是将MySQL表定义更改为使用有符号列而不是无符号列。

如果您需要额外的范围,您可以随时使用bigint(尽管我认为这会对32位处理器产生性能影响)。

答案 3 :(得分:0)

我从Subsonic3 Templates for MySQL做了一个分叉。在我的fork中,我进行了修改,因此它可以支持MySQL无符号数据类型,这解决了我自己的问题:D请检查出来,http://github/funky81

答案 4 :(得分:0)

将ActiveRecord.cs中unsigned列的属性从int或?int更改为uint和?uint将部分解决问题。