2013-04-02 52 views
1

我從數據庫中提取數據,然後檢查它是否爲真,如果是,我選中該複選框。問題是變量可能爲空,然後拋出錯誤「System.InvalidCastException:指定的轉換無效」。如何投射可能爲空的布爾值

任何想法?下面的 是很好的代碼,除非它是空的字段。

if ((bool)myReader["Analytics"] == true) Analytics.Checked = true; 
+0

它是一個DB變量嗎? – nik0lias

回答

4

您可以使用DataReaderIsDBNull方法。

if (!myReader.IsDBNull(myReader.GetOrdinal("Analytics"))) 
{ 
    //not null. do your casting now. 
} 
+0

令人驚歎 - 謝謝!所以只是爲了確認它現在所做的是: 檢查該字段以確保其不爲空,然後根據需要分配檢查。 爲什麼我們需要使用getOrdinal而不僅僅是獲取字段的值? – Dashsa

+0

'ISDBNull'方法獲取一個值,該值指示列是否包含不存在或缺失的值。所以這個'if'條件檢查該列是否返回一個'null'或有效值,如果不是'NULL',它將執行塊內部的代碼。查看我答案中的鏈接以獲取更多詳細信息(單擊IsDBNull) – Shyju

+0

因爲基於序號的查找比命名的查找更高效。 – Shyju

0

嘗試這樣的:

var column = reader.GetOrdinal("Analytics"); 
if (!myReader.IsBDNull(column)) 
{ 
    Analytics.Checked = myReader.GetBoolean(column); 
} 
1

「空」 的值返回DBNull.Value所以你可以這樣做:

if(myReader["Analytics"]!=DBNull.Value) 
    Analytics.Checked = (bool)myReader["Analytics"]; 

只要在數據庫中的列是類型bit

0
 object nullable=null; 
     var result = (bool?)nullable; 
     if(result.HasValue) 
0

試試這個;

Analytics.Checked = (myReader["Analytics"] == "" || (bool)myReader["Analytics"] == false) ? false : true);