44

次のように、SQLを使用してC#を使用して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;
4

4 に答える 4

109

Userは予約済みのキーワードであるため、 「ユーザー」という名前のオブジェクトを意味することを明示するために角括弧を使用する必要があります。つまり、.[User]の代わりに使用しUserます。

于 2011-05-21T14:39:39.693 に答える
8

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

于 2011-05-21T14:43:59.850 に答える
3

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

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

Sql Server Management Studio は、SQL ステートメント内の User キーワードを強調表示し、次のように括弧で囲む必要があることを簡単に示しているはずです: [User]

于 2011-05-21T14:48:13.157 に答える