Pytanie nie można ustawić na wartość "System.Decimal". Musisz ustawić tę właściwość na wartość inną niż null typu "System.Double"


Hi używam mvc przykład, aby uzyskać dane z bazy danych. Tutaj mam błąd

Szczegóły wyjątku: System.InvalidOperationException: "Numer"   nie można ustawić właściwości "Pracownik" na wartość "System.Decimal".   Musisz ustawić tę właściwość na wartość inną niż null   "System.Double".

Opis: Wystąpił nieobsługiwany wyjątek podczas wykonywania   aktualne żądanie sieciowe. Zapoznaj się ze śledzeniem stosu, aby uzyskać więcej informacji   informacje o błędzie i skąd pochodzi w kodzie.

Proszę zobaczyć mój kod tutaj, mam powyżej błędu.

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 }
        );
}

14
2018-01-06 10:04


pochodzenie


czego jeszcze potrzebujesz? Twój komunikat o błędzie jasno określa, która właściwość, w której jest ustawiona jednostka, jest niewłaściwym typem. - Manish Mishra
Jaki jest tego rodzaj number własność twojej klasy pracowniczej? Jaki jest typ odpowiedniej kolumny w tabeli sql? - Hans Kesting
Wygląda na to, że masz niedopasowanie typów, a double jest oczekiwany dla nieruchomości number gdzie używasz decimal. - Abbas
Moje pytanie brzmi: gdzie popełniłem błąd, nie znalazłem, jak naprawić powyższe eror, a mój typ db to int i przekazanie typu również int - stpdevi
nie używam żadnej wartości dziesiętnej, ale dlaczego pojawia się błąd, którego nie zrozumiałem - stpdevi


Odpowiedzi:


Myślę, że może to wynikać z tego, że próba konwersji wartości pustej ma być przechowywana w podwójnej ilości.

Zmień swoje double do

double?

Aby uzyskać wyjaśnienia, zobacz poniższy link: http://msdn.microsoft.com/en-us/library/2cf62fcy.aspx

Dzięki!


9
2018-01-07 05:39





Może to być problem z DB, z mojego doświadczenia otrzymałem ten wyjątek, ponieważ używam danych z procedury-store (generuj klasę obiektu używając framework entity)

to jedno pole liczbowe w moim SP I dostarczam taką umowę danych

CAST(NULL AS DECIMAL) AS UnitAmount

więc w moim kodzie (po strukturze encji generuj klasę) otrzymałem klasę, która zawiera

Decimal UnitAmount{get;set;}

ale kiedy uruchamiam mój kod, ten błąd się zdarza

... nie można ustawić wartości "System.Int32". Musisz ustawić tę właściwość   do wartości innej niż null typu "System.Decimal".

dzieje się tak dlatego, że w moim SP występuje jeden warunek, że zwracam mój wynik w ten sposób, więc powrót typu danych jest niezgodny.

-- if no data
Select ... ,
       0  as UnitAmount, 
       ....

Jeśli nie rzucasz / nie konwertujesz wyniku 0 -> będzie widziane jako Int32 (0.00-> widziane jako dziesiętne,)


7
2018-01-28 10:04





Posługiwać się

public decimal number { get; set; } 

lub

public double number { get; set; }

połączyć


5
2018-01-07 06:00





W moim przypadku był to problem z widokiem, zwracając wartość, gdy istnieje wartość pusta.

Miał coś takiego "ISNULL (dbo.STOCK_ITEMS.STDCOST, 0) AS STDCOST"

Wtedy nie działał.

Próbowałem "ISNULL (dbo.STOCK_ITEMS.STDCOST, 0.0) AS STDCOST"

Nie działa też, ale następujące działa ...

ISNULL(dbo.STOCK_ITEMS.STDCOST, 0.00) AS STDCOST

Wszystko działa teraz ....


1
2018-06-17 04:40





W moim przypadku problem był w niewłaściwym typie kolumny DB - który był numeryczne a własność była długie. Więc po prostu potrzebowałem odtworzyć kolumnę jako bigint.


1
2018-03-13 15:17





Spotkałem się z podobnymi pytaniami, powiedziałem "nie można ustawić wartości" dziesiętnej ". Musisz ustawić tę właściwość na wartość inną niż null typu" Int32 "." dla jednej kolumny. i przeszukuję rozwiązanie whold, stwierdziłem, że ustawiłem tę kolumnę jako Int w roztworze. Ale w bazie danych został ustawiony jako pieniądze, zamiast int. więc zmieniłem go na poziomie bazy danych. i to działa.


0
2017-09-21 23:44





Byłem w sytuacji, w której nie mogłem zmienić typu kolumny w tabeli (duży projekt, wiele zależności).

Miałem dane o posortowaniu widoku do definicji klasy, podobne do tego:

    SELECT Name,Phone,ID FROM People

Tutaj mój identyfikator był typu int, ale był używany jako ciąg znaków. Aby rozwiązać ten problem, skonstruowałem mój widok w ten sposób:

    SELECT Name, Phone, CONVERT(NVARCHAR(2), ID) AS ContactMethodTypeId FROM People

Po prostu zamknij CONVERT wokół problematycznego typu i zwróci on jako określony typ. W moim przypadku, NVARCHAR.


0
2018-02-01 20:44





Dziesiętny w SQL nie jest taki sam jak dziesiętny w .Net. Jeśli spojrzysz na tabelę Wyliczenie SqlDbType, zobaczysz, że dziesiętny SQL jest równoważny podwójnemu typowi.

Od C # Referencje

Float-> Double. Liczba zmiennoprzecinkowa w zakresie od -1.79E do +308 do 1.79E +308.

public double? number { get; set; }

0
2018-04-04 14:29