0

以前にもやったことがありますが、今回はうまくいきません。

私がやろうとしているのは、テーブルにある未読メッセージの数を COUNT() することだけです。

テーブル定義:

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

読み取りとUserId列は、私がチェックしようとしているものです。次のことを試しました:

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

他の多くのバージョンも試しましたが、常に同じ結果です。私は常に次のエラーが発生します。

「/」アプリケーションでサーバー エラーが発生しました。

キーワード「Read」付近の構文が正しくありません。説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.Data.SqlClient.SqlException: キーワード 'Read' 付近の構文が正しくありません。

私がやろうとしているのは、これです: 「GET NUMBER OF UNREAD MESSAGES IN NOTIFICATIONSTABLE WHERE USERID = @0 AND 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();
}
4

2 に答える 2

4

read===> を角括弧で囲んでみてください[Read]

于 2012-05-15T09:42:39.200 に答える
1

あなたのエラーは、それREADがキーワードであると述べています。フィールド名ではなく、コマンドなどを解釈しています。

SQL のバージョンに関係なく、フィールド名をさまざまなマーカーで囲んで、この混乱を防ぐことができます。たとえば、SQL Server は を使用し[Read]、MySQL は などのバックティックを使用します`Read`

于 2012-05-15T09:45:04.630 に答える