Я начал изучать С# на прошлой неделе, и теперь у меня возникают проблемы с оператором 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 для отображения исключения вместо его проглатывания он бросает:
Неправильный синтаксис рядом с ключевым словом "Пользователь"
У вас есть таблица с именем "Пользователь", но это зарезервированное ключевое слово.
Вы можете переименовать таблицу или заключить ее в скобки, когда вы ссылаетесь на нее:
string commandText = "INSERT INTO [User] (firstName ...
Измените имя таблицы с "Пользователь" на что-то еще, потому что пользователь является зарезервированным ключевым словом, которое нельзя использовать снова, поэтому, если вы используете любое другое имя для таблицы, код будет работать в прекрасном примере:
create table User1(firstName varchar(20),lastName varchar(20),adress varchar(20),town varchar(20),favoriteCurrency int)
ex
и в идеале не проглотить его, а либо.ToString()
его в файл, показать исключение.ToString()
в окне сообщения, либо и то и другое.