在struct init

时间:2016-03-22 20:36:11

标签: c# sql .net

我已经搜索了堆栈溢出来解决我的问题,但没有任何东西符合我的情况。

我有一个结构,它表示从存储过程中检索的数据模式。布尔字段的数据类型可以为空,但是当返回的值为null时,我无法将值赋给列表项。

Struct看起来像这样:

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

仅当db值为null时才会出现此问题。每次出现错误时,我都尝试过所有不同的检查和强制转换。我已经阅读了sql数据类型,可以为空的数据类型。 如果我将值设置为true或者如果它为null,则它可以工作,但是如果它为null,我实际上需要它为null。

任何人都知道如何完成这项工作并允许该值在应该为空时为空?

1 个答案:

答案 0 :(得分:1)

尝试

isInlineLayout = sdr[3] as bool?

如果列值为null,我们可以利用数据读取器将返回DbNull.Value的事实。如果值无法转换为bool ?,则as运算符将产生null,而DbNull则不能。