更新/插入数据

时间:2016-11-30 01:55:55

标签: c# sql-server

我创建了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 

现在我需要一个功能,用户根据Client_Name和Emp_Name向EmpJobs输入数据(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 Clients.Client_Name=@Client_Name AND Employees.Emp_Name=@Emp_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!");

我做错了什么?什么是正确的方法呢?

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

编写一个Select Query,从Name返回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 Clients.Client_Name=@Client_Name AND Employees.Emp_Name=@Emp_Name"),
            (@Hours_Spent,@Job_Date)));

注意:此查询只是一个可能不起作用的示例。但它是提出想法或一瞥它应该如何运作的想法。

答案 2 :(得分:0)

你不能在这样的条件下使用insert / update。 而不是这个,创建一个存储过程并将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 =@Client_Name;
SET @EmpID = SELECT Emp_ID from Employees where Emp_Name =@Emp_Name;

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

)



END
GO