SQL查询注册为空的列(包含值)

本文关键字:包含值 查询 注册 SQL | 更新日期: 2023-09-27 18:15:44

查询返回我期望它现在返回的是null而不是!= null,但我仍然卡住了为什么我在我的c#应用程序中得到异常,这是我的主要问题,谢谢

当我运行查询

时,我在表WT_Users中有一个名为UserId的列
'select UserId from WT_Users;'

它返回usersid 1 2 3 4的列表这很好但是当我运行查询

'select UserId from WT_Users where UserId != null'

不返回任何值,即使我知道列中有值。我运行这些查询,因为我最初是在一个c#应用程序上工作,当我用上面的第一个查询运行一个阅读器时,我得到了一个异常"对象引用不设置为对象的实例",当我试图从阅读器中拉出值时,即使我有一个"HasRows"检查和"while read"检查满意

    SqlCommand findContactID = new SqlCommand("select UserId from WT_Users",       con);
        con.Open();
        SqlDataReader dr7 = findContactID.ExecuteReader();
        if (dr7.HasRows)
        {
            while (dr7.Read())
            {
                userIDs.Add(Convert.ToString(dr7.GetInt32(0)));
            }
        }

在visual studio中,我甚至可以看到阅读器确实包含结果视图下的值。

我已经花了太多时间试图弄清楚这个问题,这可能是显而易见的。由于

SQL查询注册为空的列(包含值)

永远不要对null使用比较操作。使用is nullis not null

当您对null使用比较运算符时,它解析为UNKNOWN,它既不是True也不是False

select UserId from WT_Users where UserId is not null

试试这个:

private void Test2(SqlConnection con)
{
    var userIDs = new List<String>();
    using (var cmd = new SqlCommand("select UserId from WT_Users", con))
    {
        con.Open();
        using (var r = cmd.ExecuteReader())
        {
            while (r.Read())
            {
                var o = r[0];
                if ((o != null) && (o != DBNull.Value))
                {
                    userIDs.Add(o.ToString());
                }
            }
        }
    }
}