【问题标题】:Syntax error with sql query [closed]sql查询的语法错误[关闭]
【发布时间】:2016-11-14 14:17:22
【问题描述】:

我有这段代码在我的函数中执行,但它一直说存在语法错误。我错过了什么吗?因为我觉得很好

 string query3 = "INSERT INTO dbo.Liguanea_Progress VALUES('" + comboBox2.Text + "' '" + textBox5.Text + "' '" + textBox2.Text + "' '" + comboBox3.Text + "''" + textBox3.Text + "''" + comboBox1.Text + "');";

【问题讨论】:

  • 我在列之间看不到任何逗号
  • @Lamak 我处理了这个查询,就像我在没有列的 SQL 中一样。我必须在我的 c# 代码中包含这些列吗?
  • “我是如何在没有列的 SQL 中做到这一点的”是什么意思?在 SQL 中,你应该有 INSERT INTO Table VALUES('a','b','c')

标签: c# sql winforms


【解决方案1】:
  1. 使用insert 时,请始终包含列名。因此,您的查询应该是INSERT INTO dbo.Liguanea_Progress(col1, col2, . . .)
  2. 永远不要只将用户输入填充到查询字符串中。虽然一个原因是这样做会使代码容易受到 SQL 注入的影响,但另一个重要原因是您可能会引入语法错误。使用参数化查询。
  3. VALUES() 中的值应该用逗号分隔,而不是空格。

【讨论】:

    【解决方案2】:

    您的查询语法无效。您需要在每个参数后加上逗号。

    string query3 = "INSERT INTO dbo.Liguanea_Progress VALUES(@Param1, @Param2,@Param3, @Param4, @Param5, @Param6);
    

    也开始使用sql命令参数来保护你免受sql注入。这也使您可以清楚地了解您的查询。

    SqlCommand cmd = new SqlCommand();
    cmd.CommandText = query3;
    cmd.Parameters.AddWithValue("@Param1", comboBox2.Text);
    cmd.Parameters.AddWithValue("@Param2", textBox5.Text);
    cmd.Parameters.AddWithValue("@Param3", textBox2.Text);
    cmd.Parameters.AddWithValue("@Param4", comboBox3.Text);
    cmd.Parameters.AddWithValue("@Param5", textBox3.Text);
    cmd.Parameters.AddWithValue("@Param6", comboBox1.Text);
    

    【讨论】:

      【解决方案3】:
      string query3 = "INSERT INTO dbo.Liguanea_Progress(col1) VALUES('" + textBox.Text + "')";
      

      将此模式用于所涉及的后续列和相应的值。在执行插入查询时声明所涉及的列也很重要,以避免混淆。

      此外,从这段代码 sn-p 判断,我假设您正在使用 ADO.net。您可能希望将查询参数化以防止 SQL 注入,如下所示:

      command.Parameters.Add(new SqlParameter("Col1", textBox.Text));
      

      现在你的查询是这样的:

      string query3 = "INSERT INTO dbo.Liguanea_Progress(col1) VALUES(@Col1)";
      

      这使得 sql 代码更容易编辑。

      【讨论】:

        【解决方案4】:

        值之间缺少逗号和括号,试试这样的

        string query3 = "INSERT INTO dbo.Liguanea_Progress VALUES('" + comboBox2.Text + "'),('" + textBox5.Text + "'),('" + textBox2.Text + "'),('" + comboBox3.Text + "'),('" + textBox3.Text + "'),('" + comboBox1.Text + "');";
        

        如果要将多个值插入同一列,则每个值都需要括号。如果您将其插入一行,那么您只是缺少逗号;

        string query3 = "INSERT INTO dbo.Liguanea_Progress VALUES('" + comboBox2.Text + "','" + textBox5.Text + "','" + textBox2.Text + "','" + comboBox3.Text + "','" + textBox3.Text + "','" + comboBox1.Text + "');";
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-12-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-05
          相关资源
          最近更新 更多