2016-11-28 28 views
0

我創建3個表:無法得到此表更新,SQL Server數據庫C#應用程序

  • 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,其基於ClientsEmployees中的相關列。

這裏是我的代碼

string constring = "Data Source=baker-pc;Initial Catalog=BakodahDB;Integrated Security=True"; 
string sqlQuery = "UPDATE EmpJobs SET [email protected]_Spent, Job_Date [email protected]_Date" + 
        " 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!"); 

它不會顯示在Visual Studio中的任何錯誤,但是當我檢查數據庫沒有什麼數據沒有被插入到表中。有什麼問題?

+7

你不能用UPDATE語句插入數據。它只能更新EXISTING數據 –

+1

如果你正在尋找upsert然後谷歌sql合併 – Steve

回答

1

如果您不知道該客戶端名稱和僱員名稱是否存在記錄,並且您想要INSERT(如果記錄不存在)或UPDATE(如果該記錄存​​在),那麼您可以使用單個T-SQL聲明呼籲MERGE

string sqlQuery = @"MERGE EmpJobs T 
       USING (SELECT @Client_Name AS CName, @Emp_Name As EName) as S 
       ON T.Client_Name = S.CName AND T.Emp_Name = S.EName 
       WHEN NOT MATCHED THEN INSERT 
         (Hours_Spent, Job_Date) VALUES (@Hours_Spent, @Job_Date) 
       WHEN MATCHED THEN UPDATE 
         SET [email protected]_Spent, Job_Date [email protected]_Date;"; 

合併命令後跟目標表的名稱和它的別名(EmpJobs T)則僞記錄使用搜索記錄所有腦幹需要兩個參數構建的。該僞記錄與目標表匹配。 此時,如果發現匹配(UPDATE SET ....)或不(INSERT .... VALUES),則可以編寫要使用的語句。不要忘記最終的分號。

+0

沒有工作它說的語法錯誤 – Baker

+0

忘記a =後ename,刪除現在試試 – Steve

1

你真的不應該重複跨表的值(Client_Name,Emp_Name)。我建議在http://www.drsql.org/Pages/Presentations.aspx處查看Louis Davidson關於數據庫設計的幻燈片。

合併是一個選項,或者你可以用upsert去。 https://samsaffron.com/blog/archive/2007/04/04/14.aspx

這就是說,這樣的事情可能工作:

string sqlQuery = @" 
declare @Client_ID int; 
declare @Emp_ID int; 

select @Client_ID = Client_ID from dbo.Clients c where c.Client_Name = @Client_Name; 
select @Emp_ID = Emp_ID from dbo.Employees e where e.Emp_Name = @Emp_Name; 

begin tran; 
if exists (select 1 from dbo.EmpJobs j with (updlock,serializable) where [email protected]_ID and [email protected]_ID) 
    begin; 
    update dbo.EmpJobs set 
     Hours_Spent = @Hours_Spent 
     , Job_Date = @Job_Date 
     where Client_ID = @Client_ID and [email protected]_ID; 
    end; 
    else begin; 
    insert into dbo.EmpJobs (Emp_ID, Emp_Name, Client_ID, Client_Name, Hours_Spent, Job_Date) 
     select @Emp_ID, @Emp_Name, @Client_ID, @Client_Name, @Hours_Spent, @Job_Date; 
    end; 
    commit tran;"; 
相關問題