我有三张桌子:
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!")
答案 0 :(得分: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更新查询有问题