2017-02-09 32 views
-5

喜是问关于我的错误看到我的屏幕截图,感谢询问的DBNull其他类型的

DBNULL to other types 创建我的C#代码读取Excel文件,但一些有问题请看我上面的屏幕截图

其他

问题,我输入您的代码,但将显示在下面

Other Error

+0

包括片段以及 –

+0

什么是'row'的类型? – Dai

+0

您读取的行中的列(位于索引8)为空。您不能将空值存储在小数点中。 – Rob

回答

-2

使用或(||)条件,而不是和误差见截图(& &)条件,如下图所示:

if(onhand == "" || row[8] == System.DBNULL.value) 
{ 
    //your code 
} 
else 
{ 
    ONHANDQTY=Convert.toDecimal(row[8]); 
} 
+0

'DBNull'和'null'不一样。 – Rob

+0

好吧先生,我试试这个thnaks –

0

我不知道你正在使用的数据库的库,但多数图书馆建在顶ADO.NET并不总是使用.NET null参考指示一个SQL NULL值。这就是DBNull用于(通过DBNull.Value访问)。您可以使用Object Reference Equality运算符==Object.ReferenceEquals来测试SQL NULL

您的代码相当复杂。我建议你试试这个:

Object value = row[8]; // I don't know what `row` is, change this to be a more specific type if there are any type-safety constraints on `row[8]`. 
if(Object.ReferenceEquals(DBNull.Value, value)) { 
    // value is SQL NULL 
} 
else { 
    // value is not SQL NULL, but it is not necessarily a Decimal value either 

    if(value is Decimal) { 

     return (Decimal)value; // you can't use the shorthand `as` operator with value-types like Decimal 
    } 
} 
0

希望有可能是row[8]DBNull的机会。在这种情况下,您可以通过比较row[8]System.DBNull.Value来检查。
尝试这样的:

if (row[8] != System.DBNull.Value)) 
{ 
    decimal quantity; 
    if(decimal.TryParse(row[8].ToString(), out quantity) 
    { 
     item.ONHANDQTY = quantity; 
    } 
} 
+0

如果'row [8]'已经是一个'Decimal'值而不是一个字符串,这是低效的。 – Dai

+0

@戴:是的,你在这个意义上是正确的。但是我已经考虑了OP代码中的Convert.ToDecimal –

相关问题