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中,我甚至可以看到阅读器确实包含结果视图下的值。
我已经花了太多时间试图弄清楚这个问题,这可能是显而易见的。由于永远不要对null
使用比较操作。使用is null
或is 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());
}
}
}
}
}