【问题标题】:Assigning null value to nullable boolean in struct init在struct init中将空值分配给可为空的布尔值
【发布时间】:2016-03-23 04:42:13
【问题描述】:

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

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

结构看起来像这样:

    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。

任何人都知道我怎样才能完成这项工作并允许该值在应该为空时为空?

【问题讨论】:

  • 这应该可以isInlineLayout = sdr.IsDBNull(3) ? (bool?)null : sdr.GetBoolean(3),,你遇到了什么错误?
  • 这确实有效。我把这段代码一字不差地准备好了,但它不工作,但是当我昨天早上上班时,我看到了你的评论,再试了一次,很好。一定有一些无关的句法混淆器或其他东西。无论如何,谢谢!

标签: c# sql .net


【解决方案1】:

试试

isInlineLayout = sdr[3] as bool?

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

【讨论】:

    猜你喜欢
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 2015-11-18
    • 2012-12-06
    • 2013-05-09
    相关资源
    最近更新 更多