c# - 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);
}
这是我解决它的方法。我究竟做错了什么?
解决方案
要评估数据库字段以确定它们的值是否为 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 )
推荐阅读
- python - 如何在 django 中执行 ...ON DUPLICATE KEY UPDATE ...
- c - 我可以将一个值加载到寄存器中而不会停止,直到它从内存中获取?
- php - Axios post 方法使用 Laravel 失败,状态码为 500
- performance - 带列的性能 SQL Where 子句
- git - 将代码从分支推送到git中的主分支的正确方法?
- c# - RichTextBox.GetCharFromPosition 在使用文本框尺寸时返回不正确的字符
- amazon-web-services - 使用 Boto3 和 Create_Pipeline 时,PipelineActivity 的错误必须只有一个成员
- react-native - React Native Navigation 重新加载 Stack Navigator 主屏幕
- javascript - 如何更改浏览器中 document.cookie 中显示的值?
- c# - 使用 c# 通过 SMTP 邮件协议发送位图图像,显示损坏的图像