【问题标题】:Check number of Unread messages in Table?检查表中未读消息的数量?
【发布时间】:2012-05-15 09:39:41
【问题描述】:

我以前也这样做过,但这次不行。

我要做的只是 COUNT() 表中未读消息的数量。

表格定义:

UserId(int), From(int), Type(nvarchar), Message(nvarchar), Read(bit)

Read 和 UserId 列是我要检查的内容。我尝试了以下方法:

 database.QuerySingle("SELECT COUNT(*) AS NumberOfNotifications FROM Notifications WHERE UserId = @0 AND Read = CONVERT(bit,0)", userid);

我也尝试过许多其他版本,但结果总是一样。我总是收到以下错误:

“/”应用程序中的服务器错误。

关键字“读取”附近的语法不正确。描述:一个未处理的 执行当前 Web 请求期间发生异常。 请查看堆栈跟踪以获取有关错误的更多信息和 它起源于代码的地方。

异常详细信息:System.Data.SqlClient.SqlException:不正确 关键字“Read”附近的语法。

我想要做的是: “在 NOTIFICATIONSTABLE 中获取未读消息的数量,其中 USERID = @0 并且 READ = FALSE”

感谢任何帮助!

谢谢

更新

以下是我遇到问题的助手的完整代码。现在我已经修复了错误,我不知道为什么在我登录时它没有显示“您有新的通知消息” - 相应的表格中有 4 行。

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

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

【问题讨论】:

    标签: c# sql database razor webmatrix


    【解决方案1】:

    尝试在read 周围加上方括号 ===> [Read]

    【讨论】:

    • read 是一个关键字,所以你必须把 [] 告诉 SQL 这是一个列名而不是关键字...
    • 天啊,我完全忽略了这一点。谢谢!但它仍然不起作用。 (但至少现在没有错误。)我已经用完整的(不是 muh)代码更新了我的问题。如果可以的话,请看一下:)
    • 是返回值'notifications'的整数吗?
    • 是的。应该。但我无法看到我知道的,因为当我尝试输出通知的值时,什么都没有出现。
    • 当它进入 iff 语句时,它总是只显示已登录的人的姓名,只有在没有未读通知时才会发生这种情况 - 但有。
    【解决方案2】:

    您的错误表明READ 是关键字。它解释的是命令或类似命令,而不是字段名称。

    不同版本的 SQL 您可以将字段名称括在不同的标记中以防止这种混淆。例如 SQL Server 使用[Read],MySQL 使用反引号,例如`Read`

    【讨论】:

    • 谢谢@Dems。这太奇怪了,因为我以前从来不需要在任何东西中包含布尔列名。我不知道.. 但是谢谢:)
    • @shane - 并不是该字段是BOOLEAN,而是您选择了一个在 SQL 中具有某种含义的字段名称。想象一下,如果您有一个名为 SELECT 的表,其中有一个名为 FROM 的字段,那会是多么混乱。你会有SELECT FROM FROM SELECT。但在 SQL Server 中,您可以使用SELECT [FROM] FROM [SELECT]。我的个人建议只是避免使用保留关键字的表名和字段名。
    • 啊。知道了。谢谢你的澄清,@Dems。
    猜你喜欢
    • 2011-06-01
    • 1970-01-01
    • 2022-08-20
    • 2021-05-08
    • 1970-01-01
    • 2018-09-02
    • 2017-02-20
    • 2017-01-06
    • 1970-01-01
    相关资源
    最近更新 更多