2014-03-13 123 views
1

我想讀取數據庫中的值,我知道在我正在尋找的標準爲空。 所以我有這種檢查方法:ld.Percentage = reader["DataWin3Data"] != DBNull.Value ? Convert.ToDouble(reader["DataWin3Data"]) : double.MinValue; 我曾經使用它之前,一個字段可以爲空,它沒有問題。我不完全確定在這種情況下如何解決這個問題。我在下面列出了我的相關代碼。有空值時,如何改變我目前正在做的事情而不會產生這個錯誤?對象不能使用DBNull.Value從DBNull轉換爲其他類型?轉換

ld.Percentage = reader["DataWin3Data"] != DBNull.Value ? Convert.ToDouble(reader["DataWin3Data"]) : double.MinValue; 
ld.TotalCases = reader["DataWin8Data"] != DBNull.Value ? Convert.ToInt32(reader["DataWin8Data"]) : int.MinValue; 
ld.TotalPercentage = reader["DataWin7Data"] != DBNull.Value ? Convert.ToDouble(reader["DataWin7Data"]) : double.MinValue; 
+0

'Double.TryParse'怎麼樣?可能有更多的代碼行,但更安全。 – DonBoitnott

+0

@DonBoitnott可能不是一個壞主意,如果它是從讀者中走出來的話,它有什麼關係? –

+0

不應該。請參閱:http://stackoverflow.com/questions/1363185/parsing-a-decimal-from-a-datareader – DonBoitnott

回答

1

這是怎麼回事?

ld.Percentage = reader["DataWin3Data"] == DBNull.Value 
       ? double.MinValue : (double)reader["DataWin3Data"]; 

我已經多次使用這樣的代碼沒有問題。你確定你總是閱讀相同的領域,你也檢查null?

此外,當您沒有真正轉換時,請勿使用Convert。這應該是一個演員(就像我的例子)。

如果這不起作用,可能是因爲你對數據做了些奇怪的事情。也許一些序列化的方式?試試這個:

ld.Percentage = reader["DataWin3Data"] is DBNull 
       ? double.MinValue : (double)reader["DataWin3Data"]; 
+0

謝謝你是非常有用的我會棄用使用轉換,我已經找到了並非所有的領域,可以爲空有檢查它在那裏拋出錯誤。 –

+0

我有另一個問題,這似乎工作時,如果有空,但當字段填充它給了我同樣的錯誤。有沒有辦法做到這一點使用上述? –

+0

@ Kpt.Khaos你確定*這是錯誤發生的地方嗎?檢查列的名稱。或者說,把它全部寫成一種方法,這樣你就不會依賴無字母錯誤的代碼:D – Luaan

相關問題