此SQL查询将不起作用

时间:2016-11-28 00:07:03

标签: c# sql

我有三张桌子:

Clients: Client_ID, Client_Name, Client_Status,  
Employees:Emp_ID, Emp_Name, Emp_Role  
EmpJobs:Emp_ID, Emp_Name, Client_ID, Client_Name, Hours_Spent, Job_Date  

我正在尝试根据客户和员工中的相关列向EmpJobs插入数据(Hours_Spent,Job_Date)

我应该使用插入还是更新集?

这是我的代码:

private void button1_Click(object sender, EventArgs e)
{
    SqlConnection sqlConnection = new SqlConnection("Data Source=baker-pc;Initial Catalog=BakodahDB;Integrated Security=True");
    SqlCommand sqlCommand = new SqlCommand("");
    sqlCommand.Connection = sqlConnection;
    sqlConnection.Open();
    sqlCommand.CommandText = (@"UPDATE EmpJobs SET (Hours_Spent, Job_Date) VALUES ('" + comboBox3.SelectedItem + "','" + dateTimePicker1.Text + "') WHERE Client_Name='"+comboBox1.SelectedItem+"' AND Emp_Name='"+comboBox2.SelectedItem+"'");
    sqlCommand.ExecuteNonQuery();
    sqlConnection.Close();
    MessageBox.Show("Loged!")

2 个答案:

答案 0 :(得分:2)

让我指出您发布的代码中的一些错误。

  1. 更新查询中的语法错误。
  2. 我认为您忘记了更新查询的基本语法,您不能给出像insert这样的值,而不是必须分别为每列指定值。 basic syntax for Update是这样的:

    UPDATE table_name
    SET column1=value1,column2=value2,...
    WHERE some_column=some_value;
    

    2。谨防SQL Injection 你需要注意的第二件事是你的代码通过注入为黑客打开了一道大门。您必须使用参数化查询以避免注入。然后代码如下:

    string sqlQuery = "UPDATE EmpJobs SET Hours_Spent=@Hours_Spent, Job_Date =@Job_Date" + 
                      " WHERE Client_Name=@Client_Name AND Emp_Name=@Emp_Name"
    
    sqlCommand.CommandText = sqlQuery;
    sqlCommand.Parameters.Add("@Hours_Spent",SqlDbType.Int).Value = comboBox3.SelectedItem;
    sqlCommand.Parameters.Add("@Job_Date",SqlDbType.DateTime).Value = Convert.ToDateTime(dateTimePicker1.Text);
    sqlCommand.Parameters.Add("@Client_Name",SqlDbType.Varchar).Value = comboBox1.SelectedItem;
    sqlCommand.Parameters.Add("@Emp_Name",SqlDbType.Varchar).Value = comboBox2.SelectedItem;
    sqlCommand.ExecuteNonQuery();
    

答案 1 :(得分:0)

sqlCommand.CommandText = (@"UPDATE EmpJobs SET Hours_Spent='" + comboBox3.SelectedItem + "',Job_Date='" + dateTimePicker1.Text + "') WHERE Client_Name='"+comboBox1.SelectedItem+"' AND Emp_Name='"+comboBox2.SelectedItem+"'");

我认为你的sql更新查询有问题