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 ...