2016-03-22 18 views
0

null'unda null değerine atanabilir boolean atama Sorunumun cevabı için yığın taşması yaptım ama durumumla hiçbir şey uyuşmuyor.struct init

Saklı yordamdan alınan verilerin şemasını temsil eden bir yaprağım var. Bir boole alanı için veri türü null, ancak döndürülen değer boş olduğunda, değeri liste öğesine atayamıyorum.

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; 
     . 
     . 
     . 
    } 

ve ben db değeri boş olduğunda sorun oluşur burada

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), 
     . 
     . 
     . 

bunu doldurmak:

Struct buna benzer. Hatayı aldığım her defasında tüm farklı kontrolleri ve yayınlamaları denedim. Sql veri tiplerini, null veri tiplerini okudum. Değeri null ise true veya false değerine ayarlıyorum, ancak boşsa null olması gerekiyor.

Bunu nasıl başarabileceğimi bilen ve değeri olması gerektiğinde değerin null olmasına izin veren var mı?

+1

Çalışması gereken 'isInlineLayout = sdr.IsDBNull (3)? (bool?) null: sdr.GetBoolean (3), ', hangi hatayı alıyorsunuz? –

+0

cevaba buradan bakın http://stackoverflow.com/questions/5409936/casting-datareader-value-to-a-to-a-nullable-variable – rashfmnb

+0

Bu işe yaradı. Bu kodu yerinde verbatim vardı ve işe yaramadı, ama dün sabah işe başladığımda, yorumunuzu gördüm, bir kez daha denedim ve iyiydi. Bazı yabancı sözdizimsel obfuscator ya da bir şey olmalı. Neyse, teşekkürler! – Josawalk

cevap

1

isInlineLayout = sdr[3] as bool? 

biz sütun değeri boş ise veri okuyucu DBNull.Value dönecektir gerçeğinden yararlanabilir deneyin. Değer, bobine dönüştürülemezse, as operatör null üretecektir?