【问题标题】:Incorrect syntax near ')'. when trying to insert values into the database')' 附近的语法不正确。尝试将值插入数据库时
【发布时间】:2012-06-23 21:18:00
【问题描述】:

我是新手,这是我的第一个问题。

我正在尝试向数据库中插入一个值并收到错误消息

')' 附近的语法不正确。

cmd.ExecuteNonQuery() 被突出显示。这是我的代码:

con.Open()
cmd = New SqlCommand("INSERT INTO orders ('" + IDProduct.Text + "')", con)
cmd.ExecuteNonQuery()
con.Close()

【问题讨论】:

    标签: asp.net sql vb.net visual-studio-2010 sql-server-2008


    【解决方案1】:

    首先,NEVERNEVER NEVER 构建这样的 sql 查询。请改用参数化查询。

    其次,您的 sql 命令中缺少“VALUES”。

    INSERT INTO orders VALUES ( .... )
    

    编辑:

    第三,正如 marc_s 所建议的,最好也指定列名。这样你就可以避免以后出现一些意外。

    【讨论】:

    • 另外,我要补充一点:总是在您的 INSERT 语句中指定一个明确的列列表:INSERT INTO dbo.Orders(Col1, Col2, Col3, ....) VALUES(VAl1, Val2, Val3, .....)
    • @marc_s,好点子,谢谢。也将其添加到我的答案中。
    • 谢谢大家。这真的很快。
    • @user1477362 欢迎来到Stack Overflow - 每个答案旁边都有一个全息复选框,勾选它会给你几分。仅供参考,您可以省略可能导致混淆的 VALUES 和 Column 名称。像这样:INSERT INTO ORDERS (SELECT '" + IDProduct.Text + "')"
    • Jeremy,是的 - 但是,这样的代码极易受到 SQL 注入攻击(因为 IDProduct.Text 的值可能是 ";DELETE FROM ORDERS WHERE 1 = 1;;") - 如果架构发生变化,您的 select 语句会突然不再起作用(因为 Orders 中的列顺序现在不反映IDProduct.Text 中指定的顺序)。这是一个明确的案例,其中参数化查询是必要的。
    【解决方案2】:

    SQL语句INSERT INTO的语法有两种形式

    您没有指定列名

    INSERT INTO table VALUES (value1, value2, value3,...)
    

    或者你同时指定列名和值

    INSERT INTO table (col1, col2, col3,...)
                 VALUES (value1, value2, value3,...)
    

    当指定所有字段值时,应使用第一种情况。
    当您要插入特定列的值时,应使用第二种情况

    【讨论】:

      【解决方案3】:

      应该使用的值:

      INSERT INTO table_name
      VALUES (value1, value2, value3,...)
      

      【讨论】:

        【解决方案4】:

        插入查询语法为:

        insert into <tablename> values(col1 <datatype>,col2 <datatype>)
        

        你错过了values,这就是你得到错误修改这一行的原因:

         cmd = New SqlCommand("INSERT INTO orders values ('" + IDProduct.Text + "')", con)
        

        【讨论】:

        • 我认为正确的插入查询语法是insert into &lt;tablename&gt; (col1,col2) VALUES (@col1,@col2)?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-09
        • 1970-01-01
        • 2020-09-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多