2013-07-09 31 views
2

我試圖避免使用0的數據庫空值,如果它不爲null,則獲取原始值。DBNULL.Value始終返回True從數據庫獲取值

但我有一些問題。

這裏是我的示例代碼:

int Value = 0; 
    for(int i = 0; i < tblValue.Rows.Count; i++) 
    { 
     if (tblValue.Rows[i][""]== DBNull.Value)//Here it always returns true.. even there are values at Position 1 and 
     { 
     Value += 0;       
     } 
     else 
     { 
     Value += Convert.ToInt32(tblValue.Rows[i][""]); 
     } 

    } 

任何想法?

我檢查DBNUll值錯誤的方式?

+6

你爲什麼要檢查一個空名稱的列?這對我來說看起來不對。(你爲什麼還要用'Value + = 0'? –

+2

你正在索引一個空列「」。當然你想這樣做?你是什麼r數據庫查詢,還是返回哪些列?順便說一句,檢查你是否不想在數據庫中使用'SELECT SUM(COLUMNNAME)FROM XXX'自行創建這個總和。總和將更有效率這種方式 – saamorim

+0

這只是一個示例代碼。我在我的實際代碼中有列名。 – dnts2012

回答

1

是的。嘗試(DBNull.Value.Equals(tblValue.Rows [I] [ 「」]);

http://msdn.microsoft.com/en-us/library/system.dbnull.value.aspx

+0

謝謝,但它沒有奏效。我得到了同樣的結果。它返回了我的位置1空值我在哪裏知道db值不爲空。:( – dnts2012

+1

因此,如果這不起作用,並且您試圖替換空值的值,請在SQL語句中嘗試它: 代替: 「從麋選擇美洲駝」做: 「選擇COALESCE(美洲駝,0)麋」 如果美洲駝爲null,這將與0 – jgriffin

1

嘗試這樣的:

int Value = 0; 
for(int i = 0; i < tblValue.Rows.Count; i++) 
{ 
    if (!IsDBNull(tblValue.Rows[i][""])) 
    { 
     Value += Convert.ToInt32(tblValue.Rows[i][""]); 
    } 
} 

這僅當數據庫值遞增Value可變NOT NULL

+0

C#替換它不具有模塊功能,如VB.NET does afaik .... – Alxandr

+0

@Alxandr - [C#Convert.IsDBNull方法的MSDN文檔](http://msdn.microsoft.com/en-us/library/system.convert.isdbnull.aspx?cs- save-lang = 1&cs-lang = csharp#code-snippet-1) –

+0

是的,這很好,但它仍然意味着你的代碼是無效的(因爲,它不會編譯),不是? – Alxandr