执行 INSERT 时出现 SQL 错误:“s”附近的语法不正确 [重复]

Posted

技术标签:

【中文标题】执行 INSERT 时出现 SQL 错误:“s”附近的语法不正确 [重复]【英文标题】:Getting SQL error when executing INSERT: Incorrect syntax near 's' [duplicate] 【发布时间】:2020-06-07 05:00:15 【问题描述】:

我正在尝试创建一个 Windows 表单,当我输入数据并单击提交时,它会将数据插入到我的数据库中。它适用于简短的事情,但是当我尝试输入一些较长的句子时,它会说:

这是代码:

private void SubmitButton_Click(object sender, EventArgs e)

    con.Open();
    cmd = new SqlCommand("INSERT INTO Jokes VALUES('" + EnterJoke.Text + "', '" + EnterAnswer.Text + "')", con);

    cmd.ExecuteNonQuery();

    MessageBox.Show(" Data Has Been Saved In Database ");
    con.Close();

我在这一行得到错误:

cmd.ExecuteNonQuery();

【问题讨论】:

这也可能与您输入的具有特殊字符的文本有关,这些特殊字符“可能”转换为某些 SQL 标点符号。你能发布一个失败输入的例子吗? SQL Injection alert - 您应该将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入 - 查看Little Bobby Tables 享受 SQL 注入...也许你应该使用准备好的语句。如果您正确使用它,错误将被删除。 这能回答您的问题吗? ***.com/questions/62081911/… 【参考方案1】:

输入文本必须有一个特殊字符标点符号,该标点符号不会被视为文字文本的一部分,因为您的代码正在执行纯连接。

试试下面修复两个问题的代码:

    最重要的是 SQL 注入漏洞。 其次,您的问题(如果它与具有特殊字符的输入字符串有关)
    private void SubmitButton_Click(object sender, EventArgs e)
    
        SqlParameter joke = new SqlParameter();
        joke.ParameterName = "@joke";
        joke.SqlDbType = SqlDbType.VarChar;
        joke.Value = EnterJoke.Text;

        SqlParameter answer = new SqlParameter();
        answer.ParameterName = "@answer";
        answer.SqlDbType = SqlDbType.VarChar;
        answer.Value = EnterAnswer.Text;

        cmd = new SqlCommand("INSERT INTO Jokes VALUES(@joke, @answer)", con);    
        cmd.Parameters.Add(joke);
        cmd.Parameters.Add(answer);

        con.Open();
        cmd.ExecuteNonQuery();

        MessageBox.Show(" Data Has Been Saved In Database ");
        con.Close();
    

【讨论】:

非常感谢,效果很好!您可能会说,我对 .NET 平台和 SQL 非常陌生。请问,您修改了什么来解决特殊字符的问题?也许你可以把我推荐给谈论它的地方?谢谢。 很高兴它成功了!在进行修复之前,让我用简单的术语重申根本原因 - 您的原始代码将数据值与查询正文混合在一起。因此,如果您的值具有 SQL 可识别的字符,则 SQL Server 会尝试根据其语义解释这些字符,从而导致失败或某些错误更新。现在解决方法是 - 解决根本原因声明 - 从查询正文中分离出数据值。因此,它不会根据其语言规则将这些作为参数传递的数据值解释为文字字符串。这非常具体到您的问题是如何解决的 与我们当前的问题场景相比,参数化查询还有其他原因和附加优势。文章here 似乎是1 级,简单、清晰、清晰地阅读了这个主题。网上还有很多这样的其他人,您可以浏览它们以查找参数化查询。 啊,好的,非常感谢!如果您愿意,我还有另一个与我刚刚发布的问题类似的问题,也许您可​​以看看。我无法通过 DataGridView 将数据插入我的数据库。但无论如何,谢谢。

以上是关于执行 INSERT 时出现 SQL 错误:“s”附近的语法不正确 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

从 Excel VBA 运行工作参数化 Access SQL 查询 (INSERT INTO) 时出现“需要对象”错误

ORACLE PL/SQL 在查询 3 列信息时出现存储过程错误

文件位置更改为远程共享时出现 BULK INSERT 错误

使用 INSERT INTO 时出现 MySQL 错误 2002

使用 symfony 和 MAMP 时出现 PDO 连接错误

在SQL Sever复制数据库时出现启动、执行SQL Server代理作业错误的解决方法