这是我的工作。 cmd.ExecuteNonQuery
出现问题。
描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.Data.SqlClient.SqlException:关键字“Order”附近的语法不正确。
源错误:第44行:cmd.ExecuteNonQuery();
protected void Button2_Click(object sender, EventArgs e)
{
SqlCommand cmd = new SqlCommand("insert into Order values('" +DropDownList1.SelectedValue+"','" +DropDownList2.SelectedValue+ "','" +txtQuantity.Text+ "','" +DropDownList3.SelectedValue+ "','" +TextBox1.Text+ "')", con);
cmd.ExecuteNonQuery();
con.Close();
DropDownList1.SelectedValue= "";
DropDownList2.SelectedValue = "";
txtQuantity.Text = "";
DropDownList3.SelectedValue= "";
TextBox1.Text = "";
}
答案 0 :(得分:6)
小心使用关键字
SQL可能会看到您的ORDER
表,并期望它是ORDER BY
语句。考虑将表名包装在方括号中以解决此问题:
INSERT INTO [Order] VALUES(...)
参数化,非连接
此外,您应该考虑使用参数而不是字符串连接来构建查询,它可以防止常见的语法错误并保护您免受SQL注入攻击等恶意:
protected void Button2_Click(object sender, EventArgs e)
{
// Build your query
var query = "INSERT INTO [Order] VALUES(@V1,@V2,@Quantity,@V3,@V4)";
// Build your command
using(var cmd = new SqlCommand(query,con))
{
// Consider explicitly opening your connection if it isn't open
con.Open();
// Add your parameters
cmd.AddWithValue("@V1",DropDownList1.SelectedValue);
cmd.AddWithValue("@V2",DropDownList2.SelectedValue);
cmd.AddWithValue("@Quantity",txtQuantity.Text);
cmd.AddWithValue("@V3",DropDownList3.SelectedValue);
cmd.AddWithValue("@V4",TextBox1.Text);
// Execute your query
cmd.ExecuteNonQuery();
// Clear your parameters and other stuff here
}
}
答案 1 :(得分:-1)
您必须指定5列的名称才能插入5个值。你只写了5个值,但要插入到哪里?
尝试这样的事情,
insert order (column1, column2, column3, column4, column5) values(your code here)
你最好在互联网上搜索一下。