0

私は次のコードを持っています:

@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(*) FROM NotificationsTable WHERE UserID = @0 AND MessageWasRead = @1", userid, false);

    var DisplayName = "";
    if(notifications < 1)
    {
        DisplayName = name["FirstName"] + " " + name["LastName"];
    }
    else
    {
        DisplayName = name["FirstName"] + ", you have " + notifications + " 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();
}

これは、テーブル内のすべての行をカウントし、Webページでユーザーに「新しい通知」メッセージを表示するか、名前だけを表示することになっていますが、機能していません。

この質問は編集しないでください。この質問を再投稿する理由は、以前の質問が変更されたため、回答が不正確になったためです。

4

2 に答える 2

4

は単一のスカラー値を返すので、代わりSELECT COUNT(*)に使用したいと思います。database.QueryValue()

int notifications =  (int)database.QueryValue("SELECT COUNT(*) FROM NotificationsTable WHERE UserID = @0 AND MessageWasRead = @1", userid, false);

http://msdn.microsoft.com/en-us/library/webmatrix.data.database.queryvalue(v=vs.99).aspx

于 2012-05-15T13:21:31.610 に答える
2

このようにしてみてください:

@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 convert(int,COUNT(*)) as 'counter' FROM NotificationsTable WHERE UserID = @0 AND MessageWasRead = @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();
}
于 2012-05-15T13:23:33.133 に答える