2015-01-02 34 views
0

我有一個錯誤,這是null值的結果。我希望所有null值顯示爲0。我該怎麼做呢?如何將.net c#中的DBNull轉換爲0?

對象不能從DBNull轉換爲其他類型。

描述:執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。

異常詳細信息:System.InvalidCastException:對象無法從DBNull轉換爲其他類型。

這是標記的線。

Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "December2013DailyOrderCount")); 
+0

爲DbNull添加一個特例? –

+0

'December2013DailyOrderCount'的基本類型是什麼:如果'number(something)null'那麼你是否認爲套接字是'decimal?'並且檢查它的'HasValue'屬性? – Richard

回答

3

最簡單的方法是修改您的SQL以使用ISNULL將null轉換爲默認值。

否則,您需要在您的Web應用程序代碼中使用條件邏輯。這很容易取決於上下文。 (如:項目模板)在標記它也很難,在後面的代碼只是讓下屬值到一個臨時的,如果返回null 0

+0

我選擇了這種方法,因爲它更容易,僅供內部使用。 – TowelsRus

0

只要做對值爲DBNull.Value額外的檢查:

var input = DataBinder.Eval(e.Row.DataItem, "December2013DailyOrderCount"); 
var x = (input == DBNull.Value) ? 0 : (decimal)input; 

另一種選擇是在查詢中解決這個問題,就像這樣:

select coalesce 
     (December2013DailyOrderCount 
     , 0 
     ) 
     December2013DailyOrderCount -- column alias!!! 
from xxx 
0

你試過:

var value = DataBinder.Eval(e.Row.DataItem, "December2013DailyOrderCount"); 
Convert.ToDecimal(value == DbNull.Value ? 0 : value); 
0

我認爲它好在函數後面創建代碼並在綁定數據時調用該函數:

protected decimal ConvertNullDecinalToZero(object val){ 
    decimal number; 
    if (Decimal.TryParse(value, out number)) 
    return number 
else 
    return 0; 
} 


var input = DataBinder.Eval(e.Row.DataItem, Convert("December2013DailyOrderCount")); 
+0

這比每種情況下的內聯代碼都要好,但使用更好的名稱會更好(例如「ConvertAndDefaultNullableDecimal」),「Convert」是特定函數的非常通用的名稱。 – Richard

+0

@Richard編輯。如果你喜歡這個答案,你總是可以贊成。 – qamar