Ответ 1
Я думаю, это может быть из-за того, что попытка конверсии нулевого значения хранится в double.
Измените double
на
double?
Для пояснения см. приведенную ниже ссылку: http://msdn.microsoft.com/en-us/library/2cf62fcy.aspx
Спасибо!
Привет, я использую пример 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 }
);
}
Я думаю, это может быть из-за того, что попытка конверсии нулевого значения хранится в double.
Измените double
на
double?
Для пояснения см. приведенную ниже ссылку: http://msdn.microsoft.com/en-us/library/2cf62fcy.aspx
Спасибо!
Это может быть проблема из БД, из моего опыта я получил это исключение, потому что я использую данные из 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- > как десятичный,)
Использование
public decimal number { get; set; }
или
public double number { get; set; }
В моем случае это была проблема с представлением, возвращая значение, когда есть нулевое значение.
Было что-то вроде "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
Теперь все работает.
В моем случае проблема была в неправильном типе столбца БД - который был числовым, а свойство было длинным. Поэтому мне просто нужно было воссоздать столбец как bigint.
Я встретил похожие вопросы, сказал: "Нельзя установить значение" Десятичное ". Вы должны установить это свойство как ненулевое значение типа" Int32 "". для одного столбца. и я искал решение whold, нашел, что я устанавливаю этот столбец как Int в решении. Но в базе данных он был установлен как деньги, а не int. поэтому я изменил его на уровне базы данных. и он работает.
Я был в ситуации, когда мне не удалось изменить тип столбца в таблице (большой проект, множество зависимостей).
У меня были данные для подачи вида в определение класса, похожее на это:
SELECT Name,Phone,ID FROM People
Здесь мой идентификатор был типом int, но его потребляли как строку типа. Чтобы решить эту проблему, вместо этого я построил свой вид следующим образом:
SELECT Name, Phone, CONVERT(NVARCHAR(2), ID) AS ContactMethodTypeId FROM People
Просто заправьте этот CONVERT вокруг проблемного типа и он вернется в качестве указанного типа. В моем случае, NVARCHAR.