2017-02-09 8 views
-5

HiにDBNULLについて掲載しますが、何か問題が私の画面がおかげ</p> <p><a href="https://i.stack.imgur.com/SSSqz.jpg" rel="nofollow noreferrer">DBNULL to other types</a> 私はExcelファイルを読むために私のC#のコードを作成して、私のスクリーンショットを参照してください、私のエラーについて尋ねています他のタイプ

を撮影し、上記を参照してくださいました

他の問題は、私はあなたのコードを入力したが、

Other Error

+0

はrow' 'の種類は何 –

+0

だけでなく、スニペットが含まれていますか? – Dai

+0

読んでいる行の(インデックス8の)列がヌルです。ヌルを10進数で格納することはできません。 – Rob

答えて

-2

使用または(||)条件の代わりに、と(&下のスクリーンショットを参照してくださいエラーを示します)の条件を、以下に示すよう:

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

'DBNull'と' null'は同じではありません。 – Rob

+0

大丈夫です、私はこれを試します –

0

私はあなたが使っているものをデータベースライブラリを知りませんが、上のトップADO.NETの構築されたほとんどの図書館は常に示すために、.NET null参照を使用していませんSQL NULLの値。それはによってアクセスされるDBNullのためのものです。オブジェクト参照等価演算子==または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

@Dai:あなたはその意味で正しいですね。しかし私はOPのコードで 'Convert.ToDecimal'を考えました –

関連する問題

 関連する問題