2016-11-30 10 views
-3

を挿入私は今、ユーザがCLIENT_NAMEとEMP_NAMEに基づいEmpJobsにデータ(Hours_Spent、Job_Date)を入力する機能を必要とする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 

を作成しました。これは私が試したものです

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

条件付き挿入はありません。代わりにUPDATEを試してください –

+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クエリの値として、そのクエリを渡すの選択クエリを書きます。

(@"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つのパラメータを渡します。

ストアドプロシージャでは、ロジックを作成できます。

:私はあなたに正しい方法を教えています。

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