簡體   English   中英

SQL Datareader空值

[英]Sql Datareader null values

我正在從C#中的SQL數據讀取器讀取數據,並將列中的值傳遞到下拉列表中。 有兩列正在讀取。 使用IsDbNull,我可以處理空值。 但是,正如我現在編寫的代碼一樣,如果dr.GetString(0)為null,則根本不會傳遞任何值,而只要dr.GetString(1)(或都不為null),則所有傳遞值,而忽略空值。 這是我在讀取數據讀取器時需要的:

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());
     }
 }

我需要做的是使用數據讀取器返回的任何值填充下拉列表,無論它們位於哪一列中。為了使代碼混亂,我刪除了using和try / catch語句。 感謝大家。

我在閱讀器中處理null的首選方法是使用命名列,然后使用Convert.ToString(object)

因此,您將具有以下優勢:

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

不過,我不確定我是否理解您的問題。
你說

但是,正如我現在編寫的代碼一樣,如果dr.GetString(0)為null,則根本不會傳遞任何值,而只要dr.GetString(1)(或都不為null),則所有傳遞值,而忽略空值。

聽起來您正在使用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;

這樣,如果您沒有數據,則項目將為空。 如果一行中有一列,而另一行中有另一列,則會適當地添加它們。 但是,如果取出其他代碼,則您的代碼應該相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM