2011-03-02 33 views
0
 Artwork.ArtworkMyAvailableVotesDataTable dtCommon2 = new Artwork.ArtworkMyAvailableVotesDataTable(); 
     using (ArtworkTableAdapters.ArtworkMyAvailableVotesTableAdapter artworkTemplates = new ArtworkTableAdapters.ArtworkMyAvailableVotesTableAdapter()) 
     { 
      artworkTemplates.Fill(dtCommon2, Master.loginData.loggedInUser.ID); 
     } 

     for (int i = 0; i < dtCommon2.Count; i++) 
     { 
      string voteStatus; 
      if (dtCommon2[i].isApproved == System.DBNull.Value) 
      { 

isApproved返回null tr​​ue或false ...但我沒有嘗試似乎工作來比較,如果它爲null,它不會生成。ASP.net #c比較空不工作

錯誤1操作「==」不能 應用型「布爾」和 「System.DBNull」

回答

2

貌似isApproved是普通的布爾操作數..無論如何,如果它是你bool?可以發揮它的安全與這樣的代碼:

if (dtCommon2[i].isApproved == null || !dtCommon2[i].isApproved.Value) 

編輯:您沒有使用普通的數據表,其中的原始值可以是確實的DBNull ..我想你正在使用的組件是deali這與已經存在並呈現給您「隨時可用」的數據類別。因此,如果isApproved是布爾值,那麼當該字段爲空時它已經爲假。

+0

我所嘗試的一切都會拋出無效的轉換等:「System.InvalidCastException:指定的轉換無效。」如果這有什麼不同,Fieldtype是一點。 – 2011-03-02 12:26:20

+0

這不起作用,因爲問題是試圖比較一個'bool'(一個值類型)和'null'。 – Oded 2011-03-02 12:27:07

+0

@Tom當你點擊'isApproved'上的F12時,你看到了什麼?什麼是確切的數據類型? – 2011-03-02 12:28:15

1

您正在收到此錯誤,因爲我們無法將bull分配給Null。要麼你需要使IsApproved爲Nullable布爾值,可以通過聲明像bool來實現?被批准。或者你需要檢查dt [i]!= null。

更新:嘗試此Convert.IsDBNull(對象)檢查是否爲null。你也可以使用Convert.ToBoolean(object)。如果對象爲null,它將返回false。

+0

如何解決數據表中是否返回null的問題? – 2011-03-02 12:27:25

+0

@Tom Gullen:我更新了答案,請檢查 – Anuraj 2011-03-02 12:33:08

1

錯誤明確指出isApproved是一個bool類型,而不是bool?或其他任何東西。如果是這種情況,我建議你檢查程序的邏輯。也許你必須聲明它爲bool?在ArtworkMyAvailableVotesDataTable上,但我不確定這是一個選項。

+0

我認爲在某些情況下會將'bool?'自動轉換爲'bool',比如將其與其他類型進行比較。 – 2011-03-03 11:55:52