2

谁能告诉我为什么,从 Oracle 数据库读取时,我收到以下错误:

Object of type 'System.Decimal' cannot be converted to type 'System.Int32'.

当我将对象类型的变量( oValue)传递给函数时,就会发生这种情况。我已经尝试过强制转换、转换、取消检查、截断,几乎整个 sha-bang,但没有任何效果。这是代码失败的地方:

PropertyInfo property = Objects[0].GetType().GetProperty(sProperty);
property.SetValue(Objects[0], oValue, null);     

任何帮助将非常感激。

编辑:这是我迄今为止尝试过的:

(int)oValue, Convert.ToInt32(oValue), Math.Truncate((decimal)ovalue), Decimal.Truncate((decimal)oValue), Decimal.ToInt32((decimal)oValue), 和使用unchecked {}

4

3 回答 3

3

放:-

property.SetValue(Objects[0],Decimal.ToInt32(Convert.ToDecimal(oValue)) , null); 
于 2012-08-24T09:26:12.663 回答
0

您已经存储了整数类型的 oracle 过程,并在代码 Ado.net 中传递了十进制类型的参数。

您可以转换参数值

decimal value = ...;
int convertedValue = Convert.ToInt32(value);
于 2012-08-24T09:24:09.363 回答
0

正如该属性所期望的那样,Int32您不应将Double值传递给它。

装箱后的值只能拆箱为完全相同的类型,因此请拆箱,转换为整数并装箱:

oValue = (int)((Decimal)oValue);

如果您可以Int32从一开始就使价值成为可能,那当然会更好。

于 2012-08-24T09:26:16.837 回答