2014-06-05 82 views
1

嗨,我收到以下錯誤消息時試圖處理空值使用?合併運營商,任何想法爲什麼?用null處理null?

無法轉換System.DBNull類型的對象鍵入System.String

using(SqlDataReader rMemo = cmdUMemo.ExecuteReader()) 
{ 
     while (rMemo.Read()) 
     {       
      String Title = (String)rMemo["UpdateTitle"] ?? ""; 
      lblUTitle.Text = Title; 
     } 
} 

回答

2

使用as關鍵字:

String Title = rMemo["UpdateTitle"] as String ?? ""; 

DBNull類型不能被明確地轉換爲字符串,然而as關鍵字將嘗試進行轉換,如果失敗,則返回null。然後null將使用??運算符合併到""

1

比較它DBNull.Value並返回空字符串,如:

String Title = rMemo["UpdateTitle"] == DBNull.Value ? "" : 
              rMemo["UpdateTitle"].ToString(); 

做着同樣可以使用Convert.ToString的另一個方式,將返回空字符串DBNull.Value

String Title = Convert.ToString(rMemo["UpdateTitle"]); 

記住DBNull.Value.ToString()手段一個空字符串。所以,你可以檢查你的返回的行是否有一列UpdateTitle,然後調用Convert.ToString,如:

string Title = rMemo["UpdateTitle"] != null ? Convert.ToString(rMemo["UpdateTitle"]) 
               : ""; 

應用Convert.ToStringnull值將返回null不是空字符串。

0

一個不錯的簡單的方法來處理這個問題是寫一個擴展方法,然後可以到處使用:

public static class ObjectExtensions 
{ 
    public String ToStringOrEmpty(this object obj) 
    { 
     if(obj == null) 
      return String.Empty; 

     return obj.ToString(); 
    } 
} 

然後,你可以簡單地調用它使你的代碼不錯,可讀:

String Title = rMemo["UpdateTitle"].ToStringOrEmpty()