0

为什么我在尝试运行以下代码时出现此错误“'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 中的某些内容才能使其正常工作?

4

5 回答 5

1

不知道做什么account.All()View(x)做什么,这很难知道。如果您也使用了显式类型,那将会有所帮助x

我的猜测是,有些东西正在拆箱,short而不是ushort,但我们无法从那段代码中真正分辨出来。我认为这是一个异常而不是编译时错误?请提供更多信息!

于 2009-07-21T22:31:49.620 回答
0

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

于 2009-10-05T23:34:36.720 回答
0

I've made fork from Subsonic3 Templates for MySQL. Within my fork, I modified so it can support MySQL unsigned data types which solved my own question :D please check it out, http://github/funky81

于 2009-07-27T13:53:54.340 回答
0

根据您提供的代码提供答案非常困难。您并不是说哪一行出现错误或问题出在哪里。但是,请检查 C# 中的 Convert 类,如果问题出在 C# 中,而不是在您的 DB 或 Subsonic 上,那么我认为 Convert 可以解决问题。

ushort num1 = some_number;

短数字2;

num2 = Convert.ToUInt16(num1);

但是,很难理解这种转换的含义,你应该知道这可能会在以后破坏其他东西。

于 2009-07-21T23:19:49.570 回答
0

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

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

于 2009-07-27T11:08:05.110 回答