查询返回我期望它现在返回的是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中,我甚至可以看到读者确实包含了我在“结果”视图下的值。
我花了太多时间试图解决这个问题,这可能是显而易见的事情。感谢
答案 0 :(得分:1)
您绝不应对null
使用比较操作。使用is null
或is 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());
}
}
}
}
}