Подтвердить что ты не робот

Не может быть установлено в значение "System.Decimal". Вы должны установить это свойство в ненулевое значение типа 'System.Double'

Привет, я использую пример mvc для получения данных из базы данных. Здесь я получил ошибку

Сведения об исключении: System.InvalidOperationException: "number" свойство "Сотрудник" не может быть установлено в значение "System.Decimal". Вы должны установить это свойство в ненулевое значение типа 'System.Double'.

Описание: Необработанное исключение произошло во время выполнения текущий веб-запрос. Просмотрите трассировку стека информацию об ошибке и где она возникла в коде.

Пожалуйста, см. мой код здесь, я получил ошибку выше.

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

Ответ 1

Я думаю, это может быть из-за того, что попытка конверсии нулевого значения хранится в double.

Измените double на

double?

Для пояснения см. приведенную ниже ссылку: http://msdn.microsoft.com/en-us/library/2cf62fcy.aspx

Спасибо!

Ответ 2

Это может быть проблема из БД, из моего опыта я получил это исключение, потому что я использую данные из store-procedure (сгенерируйте класс объекта с использованием структуры сущностей)

что одно числовое поле в моем пакете SP, которое я снабжаю таким контрактом данных

CAST(NULL AS DECIMAL) AS UnitAmount

поэтому в моем коде (после того, как сущность framework сгенерирует класс), я получил класс, содержащий

Decimal UnitAmount{get;set;}

но когда я запускаю свой код, эта ошибка происходит

... не может быть установлено значение "System.Int32". Вы должны установить это свойство к ненулевому значению типа "System.Decimal".

потому что в моем SP есть одно условие случая, когда я возвращаю свой результат так, чтобы возвращаемый тип данных был несоответствием.

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

Если вы не выполняете/не конвертируете результат 0 → он будет восприниматься как Int32 (0.00- > как десятичный,)

Ответ 3

Использование

public decimal number { get; set; } 

или

public double number { get; set; }

ссылка

Ответ 4

В моем случае это была проблема с представлением, возвращая значение, когда есть нулевое значение.

Было что-то вроде "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

Теперь все работает.

Ответ 5

В моем случае проблема была в неправильном типе столбца БД - который был числовым, а свойство было длинным. Поэтому мне просто нужно было воссоздать столбец как bigint.

Ответ 6

Я встретил похожие вопросы, сказал: "Нельзя установить значение" Десятичное ". Вы должны установить это свойство как ненулевое значение типа" Int32 "". для одного столбца. и я искал решение whold, нашел, что я устанавливаю этот столбец как Int в решении. Но в базе данных он был установлен как деньги, а не int. поэтому я изменил его на уровне базы данных. и он работает.

Ответ 7

Я был в ситуации, когда мне не удалось изменить тип столбца в таблице (большой проект, множество зависимостей).

У меня были данные для подачи вида в определение класса, похожее на это:

    SELECT Name,Phone,ID FROM People

Здесь мой идентификатор был типом int, но его потребляли как строку типа. Чтобы решить эту проблему, вместо этого я построил свой вид следующим образом:

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

Просто заправьте этот CONVERT вокруг проблемного типа и он вернется в качестве указанного типа. В моем случае, NVARCHAR.