2016-11-28 43 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();