如何计算SQL Server数据库中的行数?

时间:2012-05-15 12:49:16

标签: sql-server database

我正在尝试计算数据库表中未读消息的数量,但事实证明这非常困难。我甚至在线阅读教程但无济于事。

我正在做的事应该很简单。

这是我正在尝试做的事情:

COUNT NUMBER OF ROWS IN NOTIFICATIONSTABLE 
WHERE USERID = @0 AND MESSAGEWASREAD = FALSE

有人可以指出我在正确的方向吗?任何帮助将不胜感激。

谢谢

@helper RetrievePhotoWithName(int userid) 
{ 
    var database = Database.Open("SC"); 
    var name = database.QuerySingle("select FirstName, LastName, ProfilePicture from UserProfile where UserId = @0", userid); 
    var notifications =  database.Query("SELECT COUNT(*) as 'counter' FROM Notifications WHERE UserID = @0 AND [Read] = @1", userid, false); 

var DisplayName = ""; 
if(notifications["counter"] < 1) 
{ 
    DisplayName = name["FirstName"] + " " + name["LastName"]; 
} 
else 
{ 
    DisplayName = name["FirstName"] + ", you have " + notifications["counter"] + " new messages."; 
} 
<a href="@Href("~/Home")" title="My Account"><img src="@Href("~/Shared/Assets/Images/" + name["ProfilePicture"] + ".png")" id="MiniProfilePicture" />&nbsp;@DisplayName</a> 

database.Close(); 

}

2 个答案:

答案 0 :(得分:8)

SELECT COUNT(*) FROM NotificationsTable WHERE 
 UserID = @UserID AND MessageWasRead = 0; 

Sql Count Function

好的,这是基于我认为应该做的事情。我不知道底层类型,所以这将是我最好的猜测。

var notifications =  database.QuerySingle("Select COUNT(*) as NumRecs....");

if((int)notifications["NumRecs"] > 0)) .......

我将通知查询更改为QuerySingle。你不需要一个记录器,你只需要一个标量值,所以应该(希望通过你所拥有的等值中的隐式转换来消除你的问题。

我还会检查你的数据库对象是否实现IDisposable(如果是这样的话,将它放在using语句中),因为你调用close,这实际上不会调用close(我知道它不是处理但是它可能有处置如果你在调用close函数之前遇到和异常,那么。

答案 1 :(得分:0)

int unreadMessageCount = db.Query("SELECT * FROM Notification WHERE UserId=@0 AND Read=@1",UserId,false).Count();

string displayname = name["FirstName"] + " " + name["LastName"] + unreadMessageCount>0?",you have " + unreadMessageCount :"";