簡體   English   中英

將空值分配給struct init中的可為空的布爾值

[英]Assigning null value to nullable boolean in struct init

我一直在尋找堆棧溢出的問題的答案,但是沒有任何一種情況適合我。

我有一個結構,它表示從存儲過程檢索的數據的架構。 布爾字段的數據類型可以為空,但是當返回的值為空時,我無法將值分配給列表項。

結構看起來像這樣:

    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或false(如果為null),則可以使用,但是如果為null,則實際上我需要將其設置為null。

任何人都知道如何完成此工作並允許該值在應為null時為空?

嘗試

isInlineLayout = sdr[3] as bool?

我們可以利用以下事實:如果列值為null,則數據讀取器將返回DbNull.Value。 如果不能將值強制轉換為bool ?,則as運算符將產生null,而DbNull則不能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM