簡體   English   中英

SqlDataReader 只能檢查(Null 或非 null 值)之一

[英]SqlDataReader can only check for one of (Null or non null value)

我正在編寫一個程序(供個人使用),將卡名存儲到數據庫中。 我想實現一種方法來查看名稱是否已經存在,如果存在,它將 go 在“Do_have_in_db_listbox”中,否則它將 go 在“do_not_have_list_box”中。 這是我這樣做的原始方法:

 while (retrieve.Read())
        {
            if(retrieve["Card"] != DBNull.Value)
            {
                listBox_haveInDB.Items.Add(word_for_query);
            }
            else if (retrieve["Card"] == DBNull.Value)
            {
                listBox_notINDb.Items.Add(word_for_query);
            }
        }

我在沒有 While 循環的情況下嘗試過這個,我嘗試過 if、else、else if 和條件的變體。 但無論出於何種原因,無論第一個條件是什么,else 語句都不會執行。 我一直在尋找並嘗試解決問題,但唯一對我有用的是異常處理程序: 截屏

retrieve.Read();
try
          {
              if(retrieve["Card"] != DBNull.Value)
              {
                  listBox_haveInDB.Items.Add(word_for_query);
              }
          }
          catch
          {
              listBox_notINDb.Items.Add(word_for_query);
          }

這是我解決它的方法。 我究竟做錯了什么?

要評估數據庫字段以確定它們的值是否為 DBNull,可以將字段值傳遞給 DBNull.Value.Equals 方法。 但是,這種方法很少使用。

 DBNull.Value.Equals(retrieve["Card"] )

嘗試使用這種語法。 這是最可靠的方法:

if (!reader.IsDBNull( reader.GetOrdinal("Card")))
{
  listBox_haveInDB.Items.Add( ...your code
}

或者您也可以使用索引

if (!reader.IsDBNull( column_index )

Card是數據表中的一個字段嗎? 如果數據表中有任何數據, retrieve["Card"]永遠不會是 null。

我想實現一種方法來查看名稱是否已經存在

如果要檢查數據表中是否存在word_for_query ,則需要將retrieve["Card"].ToString()word_for_query進行比較,而不是DBNull.Value

SqlDataReader retrieve = cmd.ExecuteReader();
try
{
    while (retrieve.Read())
    {
        if (retrieve["Card"].ToString() == word_for_query)
        {
            // if exists, show in listBox_haveInDB and return
            listBox_haveInDB.Items.Add(word_for_query);
            return;
        }
    }
    // not exists
    listBox_notINDb.Items.Add(word_for_query);
}
catch (Exception ex)
{
    Console.WriteLine("\nError:\n{0}", ex.Message);
}
finally
{
    retrieve.Close();
}

暫無
暫無

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

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