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

时间:2015-10-01 13:35:19

标签: c# sql sql-server

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

运行查询时,我在表WT_Users中有一个名为UserId的列

'select UserId from WT_Users;'

它返回一个usersIds 1,2,3,4的列表,这很好,但是当我运行查询时

'select UserId from WT_Users where UserId != null'

即使我知道列中包含值,也不会返回任何值。我运行这些查询是因为我最初在使用ac#应用程序,当我使用上面的第一个查询运行读取器时,当我试图从读取器中提取值时,我得到一个异常“对象引用未设置为对象的实例” ,甚至认为我有一个'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中,我甚至可以看到读者确实包含了我在“结果”视图下的值。

我花了太多时间试图解决这个问题,这可能是显而易见的事情。感谢

2 个答案:

答案 0 :(得分:1)

您绝不应对null使用比较操作。使用is nullis not null

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

select UserId from WT_Users where UserId is not null

答案 1 :(得分:0)

试试这个:

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