ExecuteNonQuery () выбрасывает «Неверный синтаксис рядом с ключевым словом« Пользователь »»

1

Я начал изучать С# на прошлой неделе, и теперь у меня возникают проблемы с оператором sql в INSERT. Я использовал следующий код, затем я расскажу вам, что происходит.

private void AddNewUserToDataBase(User user)
{
    string commandText = "INSERT INTO User (firstName,lastName,adress,town,favoriteCurrency) " +
                         "VALUES (@firstName,@lastName,@adress,@town,@favoriteCurrency)";

    using (SqlConnection connection = new SqlConnection(global::Laboratoire1.Properties.Settings.Default.Database1ConnectionString))
    {
        using (SqlCommand command = new SqlCommand())
        {
            command.Connection = connection;
            command.CommandText = commandText;
            command.CommandType = CommandType.Text;

            // je passe les paramètres ici pour éviter les erreurs au niveau du string commande 

            command.Parameters.Add(new SqlParameter("@firstName", user.getFirstName())); // autre façon plus générale
            command.Parameters.Add(new SqlParameter("@lastName", user.getLastName()));
            command.Parameters.Add(new SqlParameter("@adress", user.getAdress()));
            command.Parameters.Add(new SqlParameter("@town", user.getTown()));
            command.Parameters.Add(new SqlParameter("@favoriteCurrency", user.getFavoriteCurrencyId()));

            try
            {
                connection.Open();
                command.ExecuteNonQuery();
                connection.Close();
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Une erreur s'est produite.");
            }
        }
    }
}

Моя программа не вылетает, и появляется окно с сообщением об ошибке. Я пытаюсь понять мою ошибку и изменить синтаксис моей команды.Parameters.Add, но он все равно не работает:/.


После изменения блока catch для отображения исключения вместо его проглатывания он бросает:

Неправильный синтаксис рядом с ключевым словом "Пользователь"

  • 5
    Всякий раз, когда у вас есть исключение, оно сообщит вам об ошибке. Однако вы проглотили его и только что показали общее сообщение. Вам следует проверить значение ex и в идеале не проглотить его, а либо .ToString() его в файл, показать исключение .ToString() в окне сообщения, либо и то и другое.
  • 0
    Хорошо, спасибо за совет, я этого не знал :). Таким образом, проблема заключается в следующем: «Неверный синтаксис рядом с ключевым словом« Пользователь ». Я не понимаю этого: в моей таблице« Пользователь »есть все эти параметры и автоматически увеличенный сгенерированный идентификатор. Я использую varchars и int для поля FavoritesCurrency.
Теги:
executenonquery

2 ответа

2
Лучший ответ

У вас есть таблица с именем "Пользователь", но это зарезервированное ключевое слово.

Вы можете переименовать таблицу или заключить ее в скобки, когда вы ссылаетесь на нее:

string commandText = "INSERT INTO [User] (firstName ...
  • 0
    Оно работает ! Большое спасибо, немного разочарован ошибкой с этим: p Вы оба рассказали мне кое-что о C #, спасибо, ребята.
  • 1
    @ bengous квадратные скобки не имеют ничего общего с C #, который является частью SQL.
2

Измените имя таблицы с "Пользователь" на что-то еще, потому что пользователь является зарезервированным ключевым словом, которое нельзя использовать снова, поэтому, если вы используете любое другое имя для таблицы, код будет работать в прекрасном примере:

create table User1(firstName varchar(20),lastName varchar(20),adress varchar(20),town varchar(20),favoriteCurrency int)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню