ExecuteNonQuery()在关键字' User'"附近引发"语法不正确

时间:2014-10-04 21:30:52

标签: c# sql executenonquery

我上周开始学习C#,而我现在遇到INSERT sql语句问题。我使用了以下代码,然后告诉你会发生什么。

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.");
            }
        }
    }
}

我的程序不会崩溃并显示异常消息框。我试图理解我的错误并更改了我的command.Parameters.Add的语法,但它仍然无效:/。


更改catch块以显示异常而不是吞下它后,它会抛出:

  

关键字'用户'

附近的语法不正确

2 个答案:

答案 0 :(得分:2)

你有一个名为“用户”的表,但这是一个reserved keyword

您可以重命名该表,或在引用它时将其括在括号中:

string commandText = "INSERT INTO [User] (firstName ...

答案 1 :(得分:2)

将表名从“User”更改为其他名称,因为User是一个不能再次使用的保留关键字,因此如果您对表使用任何其他名称,代码将可以正常工作: -

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