web-dev-qa-db-ja.com

SQLエラー:キーワード「ユーザー」付近の構文が正しくありません

次のように、C#を使用してSQLデータベースファイルにデータを挿入するためにSQLを使用しています。

    String cs = System.Configuration.ConfigurationManager.ConnectionStrings["connection1"].ConnectionString;
    SqlConnection conn = new SqlConnection(cs);
    String sql = "INSERT INTO User (login, password, status) " + 
            "VALUES (@login, @password, @status)";
    SqlCommand comm = new SqlCommand(sql, conn);

    comm.Parameters.Add("@login", System.Data.SqlDbType.VarChar);
    comm.Parameters.Add("@password", System.Data.SqlDbType.VarChar);
    comm.Parameters.Add("@status", System.Data.SqlDbType.Bit);

    try
    {
        conn.Open();
        Console.WriteLine(conn.ToString());
        comm.ExecuteNonQuery();
        conn.Close();
        return true;
    }
    catch (Exception ex)
    {
        throw (ex);
    }
    finally
    {
        conn.Close();
    }

コマンドの実行中に次のエラーが表示されます。

キーワード 'User'の近くの構文が正しくありません:INSERT INTOユーザー(ログイン、パスワード、ステータス)値(@ login、@ password、@ status)

どうすればこれを解決できますか?

編集:欠落したパラメーター値が追加されました。

    comm.Parameters["@login"].Value = this.Username;
    comm.Parameters["@password"].Value = this._password;
    comm.Parameters["@status"].Value = this.Status;
31
BlueBird

Userは予約済みのキーワードです ですので、角括弧を使用して、object「ユーザー」という名前、つまり[User]の代わりにUser

74
Marc Gravell

ユーザーはt-sql 予約済みキーワード です。これを角括弧で囲むことでこれを解決できます。例:INSERT INTO [ユーザー]

5
Andy Johnson

データベースに対してクエリを実行します。 declare sqlキーワードを使用して変数を定義し、値を与えることができます。変数値を把握する必要がある場合は、conn.Openにブレークポイントを設定し、ローカルウィンドウを使用して、どの値を渡しているかを確認します。自由に使用できる別のツールは、SQLプロファイラーです。トレースを開始してからプログラムを実行できます。投稿したコードが実行された後、プロファイルで実行されたクエリを確認できるはずです。

これらはすべて、例外が十分な情報を提供しない場合に、SQLの何が問題なのかを理解するのに役立ちます。

Sql Server Management Studioは、sqlステートメントでUserキーワードを強調表示して、次のように角かっこが必要であることを簡単に示しているはずです。[User]

3
Charles Lambert