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

提供されたコードに基づいて回答を提供することは非常に困難です。どの行がエラーを出しているか、または問題がどこにあるかを言っているのではありません。ただし、C# の Convert クラスを確認してください。問題が C# にあり、DB や Subsonic にない場合は、Convert でうまくいくと思います。

ushort num1 = some_number;

短い num2;

num2 = Convert.ToUInt16(num1);

ただし、この変換の意味を理解するのは非常に困難です。これにより、後で別のものが壊れる可能性があることに注意してください。

于 2009-07-21T23:19:49.570 に答える
0

SubSonic 3 と MySQL でまったく同じ問題を抱えています。これを回避する唯一の方法は、MySQL テーブル定義を変更して、署名されていない列ではなく署名された列を使用することでした。

追加の範囲が必要な場合は、いつでも bigint を使用できます (ただし、これは 32 ビット プロセッサのパフォーマンスに影響を与えると思います)。

于 2009-07-27T11:08:05.110 に答える
0

Subsonic3 Templates for MySQL から fork を作成しました。フォーク内で、MySQL の署名されていないデータ型をサポートできるように変更して、自分の質問を解決しました :D をチェックしてください、http://github/funky81

于 2009-07-27T13:53:54.340 に答える