C# 如何在特定字段为空时获取行计数

C# 如何在特定字段为空时获取行计数,c#,asp.net,sql,null,C#,Asp.net,Sql,Null,这是我的桌子 RowID TimeReceived TimeRead tbl_user_UserID tbl_message_MsgID 5 2011-09-06 11:16:20 NULL 2 1 6 2011-09-06 11:17:04 NULL 3 1 7 2011-09-06 11:17:19

这是我的桌子

RowID       TimeReceived    TimeRead    tbl_user_UserID     tbl_message_MsgID

  5     2011-09-06 11:16:20   NULL               2                1
  6     2011-09-06 11:17:04   NULL               3                1
  7     2011-09-06 11:17:19   NULL               100              1

我想计算time read为null的行,它给我0作为输出,应该是3。我哪里做错了。我已将时间读取的默认值设置为空。

查询以获取计数

 command = new MySqlCommand("SELECT COUNT(Distinct RowID) FROM tbl_usermessage WHERE TimeRead= NULL AND tbl_message_MsgID=@Value1", connectionString);
         command.Parameters.Add("@value1", MySqlDbType.Int32, 25);
         command.Parameters["@value1"].Value = MessageID;
         int nnnID = Convert.ToInt32(command.ExecuteScalar());

您的SQL不正确。您可以使用
IS NULL
检查空值:

select count(Distinct RowID) from table where TimeRead is null
使用“
为NULL
”而不是“
=NULL


还要检查您的参数
@value1
是否正确

同意,TimeRead=null始终为false。任何内容都不等于null。此查询将始终返回
0
仅当
ANSI_NULLS
为off时才有效为什么使用
COUNT(Distinct RowID)
而不是
COUNT(*)
?你的问题剩下的部分不清楚是否需要这样做。
 command = new MySqlCommand("SELECT COUNT(Distinct RowID) FROM tbl_usermessage WHERE TimeRead IS NULL AND tbl_message_MsgID=@Value1", connectionString);
         command.Parameters.Add("@value1", MySqlDbType.Int32, 25);
         command.Parameters["@value1"].Value = MessageID;
         int nnnID = Convert.ToInt32(command.ExecuteScalar());
SELECT COUNT(Distinct RowID) FROM tbl_usermessage WHERE TimeRead is NULL ...