SQL查询语法错误
问题描述:
我有这个代码块在我的函数内执行,但它一直说有一个语法错误。我错过了什么吗?因为它似乎没什么问题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(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 + "');";
答
这是太长的评论。
- 使用
insert
时,请始终包含列名称。所以,你的查询应该是INSERT INTO dbo.Liguanea_Progress(col1, col2, . . .)
。 - 不只是将用户输入填入查询字符串。尽管一个原因是这样做会使代码容易受到SQL注入的影响,但另一个重要原因是您可能会引入语法错误。使用参数化查询。
-
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);
我在列之间没有看到任何逗号 – Lamak
@Lamak我接近这个查询,就像我在没有列的情况下在SQL中做的那样。我是否必须将这些列包含在我的C#代码中? – Jevon
你是什么意思“我是如何做到没有列的SQL”?在SQL中你应该有'INSERT INTO TABLE VALUES('a','b','c')' – Lamak