首页 > 解决方案 > SqlDataReader 只能检查(Null 或非 null 值)之一

问题描述

我正在编写一个程序(供个人使用),将卡名存储到数据库中。我想实现一种方法来查看名称是否已经存在,如果存在,它将进入“Do_have_in_db_listbox”,否则它将进入“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);
          }

这是我解决它的方法。我究竟做错了什么?

标签: c#visual-studiosqldatareader

解决方案


要评估数据库字段以确定它们的值是否为 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 )

推荐阅读