こんにちは、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からの問題かもしれません、私の経験から、私はストアプロシージャからのデータを使用するため、この例外を取得しました(エンティティフレームワークを使用してオブジェクトクラスを生成します)
my SPの1つの数値フィールド
CAST(NULL AS DECIMAL) AS UnitAmount
だから私のコードでは(エンティティフレームワークがクラスを生成した後)
Decimal UnitAmount{get;set;}
しかし、コードを実行すると、このエラーが発生します
...「System.Int32」値に設定できませんでした。このプロパティを 'System.Decimal'タイプのnull以外の値に設定する必要があります。
これは、my SPに、このような結果を返すケース条件が1つあるため、データ型の戻り値が一致しないためです。
-- if no data
Select ... ,
0 as UnitAmount,
....
結果0をキャスト/変換しないと、Int32として表示されます(0.00-> Decimalとして表示)
私の場合、問題は間違ったDB列タイプにありました。これは数値であり、プロパティはlongでした。したがって、列をbigintとして再作成する必要がありました。
私の場合、それはビューに問題があり、null値があるときに値を返していました。
「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
すべての作業が完了しました。..
私の場合、コードをフロートから変更しましたか?倍に? & できます。
public double? number { get; set; }
データベーステーブルの列タイプはfloatです。
テーブル内の列のタイプ(大きなプロジェクト、多くの依存関係)を変更できない状況にありました。
これに似たクラス定義にデータを供給するビューがありました:
SELECT Name,Phone,ID FROM People
ここで、私のIDはint型でしたが、タイプ文字列として使用されていました。これを解決するために、代わりに次のようにビューを作成しました。
SELECT Name, Phone, CONVERT(NVARCHAR(2), ID) AS ContactMethodTypeId FROM People
そのCONVERTを問題のある型の周りに入れると、指定された型として返されます。私の場合、NVARCHAR。
「10進」値に設定できませんでした。このプロパティを「Int32」型のnull以外の値に設定する必要があります。 1つの列に対して。そして、私はwholdソリューションを検索し、この列をソリューションのIntとして設定していることがわかりました。しかし、データベースでは、intではなくお金として設定されていました。データベースレベルで変更しました。そしてそれは動作します。
SQLの10進数は、.Netの10進数とは異なります。 SqlDbType列挙の表を見ると、SQL 10進数はdouble型と同等であることがわかります。
From C#References
フロート->ダブル。 -1.79E +308〜1.79E +308の範囲内の浮動小数点数。
public double? number { get; set; }