2016-11-30 74 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