“指定的转换无效。”,Why???
foreach (DataRow row in dtDatas.Rows)
{
MonitorDatasMonth data = new MonitorDatasMonth();
double testone = double.Parse(row["01"].ToString());
double testtwo = (double)(row.Field<decimal?>("01"));
data.THD01 = (double)(row.Field<decimal?>("01") ?? 100);
问题:“double.Parse(row["01"].ToString())” 这样可以,但是“(double)(row.Field<decimal?>("01"))”这样就会提示“指定的转换无效。” 这是为什么呢???
什么叫做“指定的转换无效。”??? 另一个地方“data.THH00 = (double)(row.Field<decimal?>("00") ?? 100);” 这样就没有问题。
}
------解决方案--------------------你先打印出
row.Field<decimal?>("01")
看是什么
和
row["01"].ToString()
结果一样吗
------解决方案--------------------首先,你的那个数据库字段要是可空的,你才可以用decimal?
其次,如果为空,你必须指定如果为空时,给与一个默认数值,否则如果为空的话,你double显示强制转换,当然会报错。
你想一个 double.Parse(null)这样的能编译通过嘛????
------解决方案--------------------加个判断条件。判断是否为空。为空一个处理。不为空一个处理
------解决方案--------------------因为row.Field<decimal?>("00")有可能返回了NULL
如果返回null的话,上一句代码就==(double)(null),当然报错了。。
row.Field<decimal?>("00") ?? 100
而这一句把null替换成100了
如果返回null的话,后一句转换相当于:(double)(100),正确。
row.Field<decimal?>("00") ?? 100
这句代码==
C# code
if(row.Field<decimal?>("00")==null)
{
return 100;
}
else
{
return row.Field<decimal?>;
}
------解决方案--------------------
LZ你需要理解
?? 运算符
A ?? B 的结果是:如果A为null,那么得到B,否则得到A
row.Field<decimal?> 返回一个 decimal?(等同Nullable<Decimal>) 值,如果对应的数据是DbNull那么会得到null,否则为一个decimal值。
row.Field<decimal?>("00") ?? 100 能保证表达式不为null,表达式返回一个decimal值
而
row.Field<decimal?>("00") 则可能为null,为一个decimal?值
可以从decimal强制转换为double但不能从decimal?转换
------解决方案--------------------
------解决方案--------------------
row.Field<decimal?>("01")
从DataTable中以decimal类型获取01这一列
就相当于
SqlDataReader sdr=new SqlDataReader();
sdr.GetDecimal(1);//如果数据库表中不是decimal的类型或者不是数字类型,这里会报错
一样的道理
------解决方案--------------------
转换之前先给个判断是否为空呗!
------解决方案--------------------
null怎么转换成 double