2016-11-03 9 views
0

次のコード:DBNullをintに割り当てようとすると、どのようにプリエンプトできますか?

foreach (DataRow fillRateDataRow in dtFillRateResults.Rows) 
{ 
    . . . 
    var frbdbc = new FillRateByDistributorByCustomer 
    { 
     ShortName = fillRateDataRow["ShortName"].ToString(), 
     Unit = fillRateDataRow["Unit"].ToString(), 
     CustNumber = fillRateDataRow["Custno"].ToString(), 
     MemberItemCode = fillRateDataRow["MemberItemCode"].ToString(), 
     Qty = Convert.ToInt32(fillRateDataRow["Qty"]), 
     QtyShipped = Convert.ToInt32(fillRateDataRow["QtyShipped"]), 
     ShipVariance = fillRateDataRow["ShipVariance"].ToString(), 
     CWeek = fillRateDataRow["CWeek"].ToString(), 
     PAItemCode = fillRateDataRow["PAItemCode"].ToString(), 
     PADescription = fillRateDataRow["PADescription"].ToString(), 
     TransactionType = fillRateDataRow["TransactionType"].ToString(), 
     SplitCase = fillRateDataRow["SplitCase"].ToString(), 
     ReasonCode = fillRateDataRow["ReasonCode"].ToString(), 
     ReasonDescription = fillRateDataRow["ReasonDescription"].ToString(), 
     CompanyName = fillRateDataRow["CompanyName"].ToString() 
    }; 

は...、 "オブジェクトは、他のタイプにはDBNullからキャストすることはできないとしながら、偉大に一度失敗し 例外出典:mscorlib 例外のStackTrace:System.DBNullで。 (Object値)System.Convert.ToInt32で (プロバイダーするIFormatProvider)

System.IConvertible.ToInt32は、だから、数量またはQtyShippedのいずれかが、時々はDBNull(文字列の海に囲まれただけint型ヴァルス)しているようです。

「DBNullなら0にvarを代入する」と言って例外を避ける方法はありますか?あなたはそれをたくさん行う必要がある場合は、読みやすくするために、あなたのコードを縮めていくだろう、このタスクのためのヘルパーメソッドを作り、

QtyShipped = fillRateDataRow["QtyShipped"] != DBNull.Value ? Convert.ToInt32(fillRateDataRow["QtyShipped"]) : 0 

答えて

1

あなたは、条件式を使用することができます。

+0

を私は2番目のためにあなたの有益な編集を見て、それは明らかに星はないRIGO、によって抹消...そしてTyCobbによって復活しました。編集の問題は起こっています! –

+0

@ B.ClayShannon彼はコンパイルエラーを修正しましたが、その理由で彼の編集が承認されました。ありがとうございました! – dasblinkenlight

1

あなたにもこの表現を使うことができます。

QtyShipped = fillRateDataRow.Field<int?>("QtyShipped") ?? 0; 
+0

また別のアイディアとして、 'Field 'を取得しようとする 'DataRow'のための' FieldOrDefault '拡張メソッドを作成できます。失敗した場合は' default(T) 'を返します。 –

関連する問題