SQL查询语法错误

问题描述:

我有这个代码块在我的函数内执行,但它一直说有一个语法错误。我错过了什么吗?因为它似乎没什么问题SQL查询语法错误

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

我在列之间没有看到任何逗号 – Lamak

+0

@Lamak我接近这个查询,就像我在没有列的情况下在SQL中做的那样。我是否必须将这些列包含在我的C#代码中? – Jevon

+0

你是什么意思“我是如何做到没有列的SQL”?在SQL中你应该有'INSERT INTO TABLE VALUES('a','b','c')' – Lamak

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

使用该图案为参与随后的列和相应的值。为了避免混淆,在插入查询时声明涉及的列也很重要。

此外,我认为你使用ADO.net从这段代码片断判断。您可能要parametize查询,以防止SQL注入,像这样:

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

使得现在你这样的查询:

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

这使得SQL代码更易于编辑。

缺少你的价值观之间的逗号和括号,尝试这样的事情

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

这是太长的评论。

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

您的查询语法无效。每个参数后都需要有逗号。

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);