2016-11-28 41 views
0

我有三个表:这个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 

我想插入数据(Hours_Spent,Job_Date)基于在客户端相关的列和员工

EmpJobs我应该使用插入或更新集?

这是我的代码:

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

**您的查询易受攻击** - 请考虑使用[预先准备的语句](http://bobby-tables.com/csharp.html)。你的更新查询也不正确 - 你已经遵循了插入查询格式,所以将'insert'替换为'insert'就行了 - 虽然它仍然很脆弱:) –

+1

可以肯定的是,通过“我的SQL查询”,你意思是*您的*(SQL Server兼容)SQL查询,而不是MySQL查询? – GolezTrol

+1

如果数据存在,并且您想要更改它然后使用更新。如果记录不存在,则使用插入。插入与创建新文件并保存相似。更新是打开文件,修改它,然后保存它。 – CodingYoshi

回答

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更新查询我觉得

+0

您的查询易受SQL注入攻击... – Hermanto

2

让我指出在你已经发布的代码一些错误。

  1. 更新查询中的语法错误。

我想你忘记了更新查询的基本语法,你不能给像插入这样的值,而是你必须分别指定每个列的值。该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 [email protected]_Spent, Job_Date [email protected]_Date" + 
        " WHERE [email protected]_Name AND [email protected]_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();