Ошибка SQL: неверный синтаксис рядом с ключевым словом «Пользователь» - PullRequest
30 голосов
/ 21 мая 2011

Я использую SQL для вставки данных в файл базы данных SQL с использованием C # следующим образом.

    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();
    }

При выполнении команды я получаю следующую ошибку.

Неверный синтаксисвозле ключевого слова 'Пользователь' .: ВСТАВИТЬ В ИНТО пользователя (логин, пароль, статус) ЗНАЧЕНИЯ (@login, @password, @status)

Как мне решить эту проблему, пожалуйста?

редактировать: добавлены пропущенные значения параметров ..

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

Ответы [ 3 ]

71 голосов
/ 21 мая 2011

User является зарезервированным ключевым словом , поэтому вы должны использовать квадратные скобки, чтобы сделать явным то, что вы имеете в виду объект с именем «Пользователь», то есть вместо этого используйте [User] User.

5 голосов
/ 21 мая 2011

Пользователь является t-sql зарезервированным ключевым словом . Заключение в квадратные скобки должно решить эту проблему. Например, INSERT INTO [Пользователь]

3 голосов
/ 21 мая 2011

запустите ваш запрос к базе данных.Вы можете использовать ключевое слово Declare sql, чтобы определить свои переменные и дать им значения.Если вам нужно выяснить значения переменных, установите точку останова на conn.Open, а затем используйте окно locals, чтобы увидеть, какие значения вы передаете. Еще один инструмент в вашем распоряжении - Sql Profiler.Вы можете запустить трассировку, а затем запустить вашу программу.Вы должны увидеть запрос как выполненный в профиле после выполнения кода, который вы опубликовали.

Все это должно помочь вам выяснить, что не так с вашим sql, когда исключение не предоставляет достаточно информации.

Sql Server Management Studio должна была выделить ключевое слово User в вашем sqlутверждение, легко показывающее, что вам нужно заключить его в скобки, например: [Пользователь]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...