sql查询语法错误

时间:2016-11-14 14:17:22

标签: c# sql winforms

我有这个代码块在我的函数中执行,但它一直说有语法错误。我错过了什么吗?因为对我来说似乎很好

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

4 个答案:

答案 0 :(得分:3)

评论太长了。

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

答案 1 :(得分: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);

答案 2 :(得分:1)

在您的值之间缺少逗号和括号,请尝试类似这样的内容

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 + "');";

答案 3 :(得分:1)

string query3 = "INSERT INTO dbo.Liguanea_Progress(col1) VALUES('" + textBox.Text + "')";

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

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

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

现在您的查询如下:

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

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