ExecuteNonQuery() 抛出“关键字‘用户’附近的语法不正确”

Posted

技术标签:

【中文标题】ExecuteNonQuery() 抛出“关键字‘用户’附近的语法不正确”【英文标题】:ExecuteNonQuery() throws "Incorrect syntax near the keyword 'User'" 【发布时间】:2014-11-29 14:24:57 【问题描述】:

我上周开始学习 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块以显示异常而不是吞下它后,它会抛出:

关键字“用户”附近的语法不正确

【问题讨论】:

只要有异常,异常就会告诉你错误。但是,您已将其吞下,只是显示了一条通用消息。您应该检查 ex 的值,最好将其吞下,然后将其记录到文件中,在消息框中显示异常 .ToString(),或两者兼而有之。 好的,谢谢你的建议,我不知道 :)。所以问题是:“关键字'用户'附近的语法不正确。我不明白这一点:我的表用户有所有这些参数和一个自动递增的生成 ID。我使用 varchars 和 int 作为字段 favoriteCurrency 【参考方案1】:

您有一个名为“User”的表,但它是reserved keyword。

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

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

【讨论】:

有效!非常感谢,有一个错误有点失望:p 你们都教了我一些关于 C# 的知识,谢谢大家。 @bengous 方括号与 C# 无关,是 SQL 的一部分。【参考方案2】:

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

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

【讨论】:

以上是关于ExecuteNonQuery() 抛出“关键字‘用户’附近的语法不正确”的主要内容,如果未能解决你的问题,请参考以下文章

sql查询之ExecuteNonQuery

c#: ExecuteNonQuery() 返回 -1

ExecuteNonQuery:连接属性尚未初始化?

确定 ExecuteNonQuery 成功执行 [重复]

ExecuteNonQuery 出错

C# sqlserver ExecuteNonQuery()方法详解