2011-03-30 61 views
1

我需要四捨五入並打印如下所示的價格,但是這不處理空值。
如何處理一行代碼中的空值?
DBRSet是一個SQLDataReader和價格是鍵入SQL。從數據庫中處理null

<%= Math.Round(DBRSet("price"))%> 

我有大約200 .aspx頁的這個,所以我也可以使用如何在一個簡單的方法改變這些有什麼祕訣?我可以做一個搜索和替換一個reg-exp或類似的東西嗎?

+0

當你像方法調用一樣使用它時,'DBRSet'如何成爲'SQLDataReader'? – 2011-03-30 12:26:36

+0

也許它是VB.Net? – Snowbear 2011-03-30 12:28:41

+0

或者它是VB.NET嗎?在那種情況下,你不需要轉換爲「小數」嗎? DataReader索引器返回'object'。 – 2011-03-30 12:30:02

回答

2

你必須明確地處理DbNull情況下,例如:

<%= DbNull.Equals(DBRSet["price"]) ? "null" : Math.Round(DBRSet["price"]).ToString() %> 

這是笨重,因此是很有意義有一個輔助方法是這樣的地方:

static class FormatDbValue { 
    public static string Money(object value) 
    { 
     if (DbNull.Equals(value)) { 
      return "0"; 
     } 

     return Math.Round((decimal)value); 
    } 
} 

哪會允許

<%= FormatDbValue.Money(DBRSet["price"]) %> 

當然查找和更改所有這樣的代碼使用輔助方法會......不愉快。我會通過在整個項目中搜索(也許在項目的較小塊)來尋找指示性的東西(可能是Math.Round?),並在更換之前手動檢查它。

+0

啊,這可能會起作用。這不是一個錯字,它的工作原理。 – Niklas 2011-03-30 12:34:49

+0

我會做助手方法的事情,所以這將是我的問題的最佳答案。 – Niklas 2011-03-30 12:41:38

0

如果你不想改變aspx的,但可以很容易地改變DBRSet屬性的定義,你可以在那裏放置一個包裝器來覆蓋SqlDataReader並實現你自己的索引器,它會首先檢查null並進入內部dataReader獲得值如果不爲空。