2009-12-10 21 views
1

我正在從C#中的SQL數據讀取器讀取數據,並將列中的值傳遞給下拉列表。有兩列正在閱讀。使用IsDbNull,我能夠處理空值。然而,正如我現在寫的代碼,如果dr.GetString(0)爲null,根本沒有值傳遞,只要dr.GetString(1)(或兩者都不爲null),所有的值傳遞並且空值被忽略。以下是我對,而DataReader的是閱讀:Sql Datareader空值

while (dr.Read()) 
{ 
    if (!dr.IsDBNull(0)) 
    { 
      machineName.Items.Add(dr.GetString(0).ToString()); 
    } 
    else if (!dr.IsDBNull(1)) 
    { 
      machineName.Items.Add(dr.GetString(1).ToString()); 
    } 
} 

我需要發生的事情是爲下拉列表與任何值DataReader的回報,無論他們是在專欄中,我已經刪除的填充。使用和try/catch語句來清理代碼。感謝大家。

+2

你的問題是什麼? – Stu 2009-12-10 18:34:10

+0

對不起。澄清了我的代碼的意圖。 – 2009-12-10 18:43:37

回答

6

我的讀者處理空值首選的方法是使用指定的列,然後使用Convert.ToString(對象)

所以,你具備以下條件:

while (dr.Read()) 
{ 
    string firstItem = Convert.ToString(dr["FIRST_ITEM"]); 
    if(!string.IsNullOrEmpty(firstItem)) 
    { 
     machineName.Items.Add(firstItem); 
    } 
    ... etc. 
} 

我不知道我理解你的問題。
你說

然而,正如我的代碼編寫 現在,如果dr.GetString(0)爲空, 沒有值沿全部通過, 而只要僅dr.GetString (1) (或兩者皆爲)爲空,則將傳遞所有值 值,並忽略空值 值。

這聽起來像你使用的if/else if,但是你的代碼顯示了兩條if語句。

編輯:

爲了更好的解決您的更新問題,我的解決辦法是有listItems中的一個通用的列表和每列添加到列表中。然後,將該列表綁定到下拉列表中:

List<ListItem> items = new List<ListItem>(); 

while(dr.Read()) 
{ 
    string firstItem = Convert.ToString(dr["FIRST_ITEM"]); 
    if(!string.IsNullOrEmpty(firstItem)) 
    { 
     ListItem thisItem = new ListItem(firstItem, firstItem); 
     items.Add(thisItem); 
    } 
} 

machineName.Items = items; 

這樣,如果您沒有數據,項目將爲空。如果一行中有一列,下一行中有另一列,它會適當地添加它們。儘管如果你拿出其他的東西,你的代碼應該是一樣的。

+1

附註:爲了表示其他可爲空的值,可以使用(爲存在)可爲空的或int ?.詮釋?是編寫Nullable 的簡寫方式,那麼您可以使用HasValue屬性檢查兩個值是否爲空。 – 2009-12-10 18:37:08

+1

甚至更​​容易=>!string.IsNullOrEmpty(dr [「FIRST_ITEM」]。ToString()) – ryanulit 2009-12-10 18:37:42

+1

@ryanulit:不會失敗,如果列不存在?我很確定(但我可能錯了),如果列上的索引器失敗,Convert.ToString()方法不會拋出異常。 – 2009-12-10 18:43:36