Cmd executenonquery

时间:2016-05-06 18:04:57

标签: c# sql

这是我的工作。 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 = "";
}

2 个答案:

答案 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)

你最好在互联网上搜索一下。