2016-11-30 71 views
-3

我在3個表更新/插入數據

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

現在我需要用戶在其中輸入數據(Hours_Spent,Job_Date)基於CLIENT_NAME和EMP_NAME EmpJobs的功能。這是我試過的

string constring = "Data Source=baker-pc;Initial Catalog=BakodahDB;Integrated Security=True"; 
string sqlQuery = (@"INSERT INTO EmpJobs (Hours_Spent, Job_Date) 
      values (@Hours_Spent,@Job_Date) 
      INNER JOIN Clients 
      ON EmpJobs.Client_ID=Clients.Client_ID 
      INNER JOIN Employees 
      ON EmpJobs.Emp_ID=Employees.Emp_ID 
      WHERE [email protected]_Name AND [email protected]_Name"); 

SqlConnection conDataBase = new SqlConnection(constring); 
SqlCommand sqlCommand = new SqlCommand(sqlQuery, conDataBase); 
conDataBase.Open(); 
sqlCommand.CommandText = sqlQuery; 
sqlCommand.Parameters.Add("@Hours_Spent",SqlDbType.Int).Value = comboBox3.SelectedItem; 
sqlCommand.Parameters.Add("@Job_Date",SqlDbType.Date).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(); 
conDataBase.Close(); 
MessageBox.Show("Saved!"); 

我在做什麼錯?什麼是正確的方法來做到這一點?

+1

您面臨的困難是什麼? –

+0

沒有條件插入,請嘗試更新 –

+0

您是否遇到任何異常?數據只是不填充?正如@Am_I_Helpful所說,你遇到的實際問題是什麼? – gmiley

回答

2

如果您確實想插入新行,那麼您需要INSERT . . . SELECT。它應該是這樣的:

INSERT INTO EmpJobs (Emp_ID, Client_ID, Hours_Spent, Job_Date) 
    SELECT e.Emp_ID, c.Client_ID, @Hours_Spent, @Job_Date 
    FROM Clients c JOIN 
      Employees e 
      ON c.Client_Name = @Client_Name AND e.Emp_Name = @Emp_Name; 
+0

完美!謝謝! – Baker

0

寫一個選擇查詢返回你Emp_IDClient_ID從名稱,然後傳遞查詢爲您的插入查詢中的值。

(@"INSERT INTO EmpJobs (Emp_ID, Client_ID, Hours_Spent, Job_Date) 
      values 
      ((Select Emp_ID, Client_ID from Employees, Clients 
      INNER JOIN Clients 
      ON EmpJobs.Client_ID=Clients.Client_ID 
      INNER JOIN Employees 
      ON EmpJobs.Emp_ID=Employees.Emp_ID 
      WHERE [email protected]_Name AND [email protected]_Name"), 
      (@Hours_Spent,@Job_Date))); 

注意:此查詢只是一個示例,這可能不起作用。但它是給出想法或一瞥它的想法應該如何工作。

0

你不能使用像這樣的條件插入/更新。 而不是這個,創建一個存儲過程並將4個參數傳遞給存儲過程。

在你的存儲過程中,你可以創建邏輯。

note:我指着你這樣做的正確方法。

CREATE PROCEDURE [dbo].[PRocname] (
@Client_Name nvarchar(your choice of length), 
@Emp_Name nvarchar(your choice of length), 
@HOurs_spent int, 
@Job_date datetime) 
AS 

BEGIN 
SET NOCOUNT ON; 

DECLARE @ClientID INT ; 
DECLARE @EmpID INT ; 
SET @ClientID = SELECT Client_ID from Clients where client_name [email protected]_Name; 
SET @EmpID = SELECT Emp_ID from Employees where Emp_Name [email protected]_Name; 

INSERT INTO EMPJobs(Emp_ID, Client_ID, Hours_Spent, Job_Date) 
VALUES (
@EmpID, @ClientID,@Hours_spent,@Job_Date 

) 



END 
GO