喜是问关于我的错误看到我的屏幕截图,感谢询问的DBNull其他类型的
DBNULL to other types 创建我的C#代码读取Excel文件,但一些有问题请看我上面的屏幕截图
其他问题,我输入您的代码,但将显示在下面
喜是问关于我的错误看到我的屏幕截图,感谢询问的DBNull其他类型的
DBNULL to other types 创建我的C#代码读取Excel文件,但一些有问题请看我上面的屏幕截图
其他问题,我输入您的代码,但将显示在下面
使用或(||)条件,而不是和误差见截图(& &)条件,如下图所示:
if(onhand == "" || row[8] == System.DBNULL.value)
{
//your code
}
else
{
ONHANDQTY=Convert.toDecimal(row[8]);
}
'DBNull'和'null'不一样。 – Rob
好吧先生,我试试这个thnaks –
我不知道你正在使用的数据库的库,但多数图书馆建在顶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
}
}
希望有可能是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;
}
}
如果'row [8]'已经是一个'Decimal'值而不是一个字符串,这是低效的。 – Dai
@戴:是的,你在这个意义上是正确的。但是我已经考虑了OP代码中的Convert.ToDecimal –
包括片段以及 –
什么是'row'的类型? – Dai
您读取的行中的列(位于索引8)为空。您不能将空值存储在小数点中。 – Rob