2016-03-22 5 views
0

私の問題に対する答えはスタックオーバーフローを洗いましたが、私の状況には何も一致しません。struct initのnullableブール値にヌル値を代入する

私はストアドプロシージャから取得したデータのスキーマを表す構造体を持っています。ブール値フィールドのデータ型はNULL可能ですが、返される値がnullの場合、値をリスト項目に代入することはできません。

public GuidelineSchema gl; 
    public struct GuidelineSchema 
    { 
     public int id; 
     public int GLtypeID; 
     public int typeValue; 
     public Nullable<bool> isInlineLayout; 
     public int ResinGroupID; 
     public int NotResinGroupID; 
     public int ResinSubTypeID; 
     . 
     . 
     . 
    } 

と私はここでそれを移入

using (SqlDataReader sdr = cmd.ExecuteReader()) 
{ 
    while (sdr.Read()) 
    { 
     GuidelineSchema gl = new GuidelineSchema() { 
     id = sdr.IsDBNull(0) ? 0 : sdr.GetInt32(0), 
     GLtypeID = sdr.IsDBNull(1) ? 0 :sdr.GetInt32(1), 
     typeValue = sdr.IsDBNull(2) ? 0 : sdr.GetInt32(2), 
     //isInlineLayout = sdr.IsDBNull(3) ? (bool?)null : sdr.GetBoolean(3), 
     //isInlineLayout = (bool?)sdr.GetSqlBoolean(3),//.GetBoolean(3), 
     //isInlineLayout = (Nullable<Boolean>)sdr.GetBoolean(3),// sdr.IsDBNull(3) ? : sdr.GetBoolean(3),//sdr.IsDBNull(3) ? false :                 
     //isInlineLayout = sdr.IsDBNull(3) ? (bool?)null : sdr.GetSqlBoolean(3), 
     isInlineLayout = sdr.GetBoolean(3), 
     ResinGroupID = sdr.IsDBNull(4) ? 0 : sdr.GetInt32(4), 
     NotResinGroupID = sdr.IsDBNull(5) ? 0 : sdr.GetInt32(5), 
     . 
     . 
     . 

問題はデシベル値がnullの場合にのみ発生します。

構造体は次のようになります。私はエラーが発生するたびに、すべての異なるチェックとキャストを試しました。私は、SQLデータ型、null可能なデータ型について読んできました。 nullの場合は値をtrueまたはfalseに設定すると機能しますが、nullの場合はnullにする必要があります。

誰でも知っていることを知っていると私はこれを行うことができ、それがされているときに値がnullになることができますか?

+1

これは 'isInlineLayout = sdr.IsDBNull(3)で動作するはずですか? (bool?)null:sdr.GetBoolean(3)、 '、あなたは何のエラーを出していますか? –

+0

こちらの回答を見るhttp://stackoverflow.com/questions/5409936/casting-datareader-value-to-a-to-a-nullable-variable – rashfmnb

+0

これは機能しました。私はこのコードをそのまま使用していましたが、機能しませんでしたが、私が昨日の朝に仕事に入ったときにあなたのコメントを見てもう一度試してみました。無関係な文法的な難読化器などがあったに違いない。とりあえずありがとう! – Josawalk

答えて

1

たちは列の値がnullの場合、データリーダーがDBNull.Valueのを返すという事実を利用することができます

isInlineLayout = sdr[3] as bool? 

を試してみてください。値がbool?にキャストできない場合、as演算子はnullを生成しますが、DbNullではキャストできません。

関連する問題