2017-08-29 96 views
0

我很難運行此代碼,我有兩個選擇語句在一個單一的查詢與不同的「聲明」,我想要的只是將其插入數據庫只是「ID」只有這裏是代碼,如何從單個查詢中的兩個不同的select語句獲取ID?

  sqc.Open(); 
      cmd = sqc.CreateCommand(); 
      cmd.CommandText = "Select DepID from UserDept where Department [email protected] and Position [email protected] union all Select SalaryID from Salaries where Gradenumber [email protected] and StepNumber [email protected]"; 
      cmd.Parameters.AddWithValue("@depe", cmbDept.SelectedItem.ToString()); 
      cmd.Parameters.AddWithValue("@posi", cmbPos.SelectedItem.ToString()); 
      cmd.Parameters.AddWithValue("@gn", cmbgrade.SelectedItem.ToString()); 
      cmd.Parameters.AddWithValue("@sn", cmbstep.SelectedItem.ToString()); 
      sda = new SqlDataAdapter(cmd); 
      dt = new DataTable(); 
      sda.Fill(dt); 
      foreach (DataRow rr in dt.Rows) 
      { 
       cmd = sqc.CreateCommand(); 
       cmd.CommandText = "insert into UserInfo2 (AccountID,DeptID,SalaryGrade,DateEmp,DateHired) Values (@idd,@dep,@sal,@emp,@hired)"; 
       cmd.Parameters.AddWithValue("@idd", "crap"); 
       cmd.Parameters.AddWithValue("@dep", rr[0].ToString()); 
       cmd.Parameters.AddWithValue("@sal", rr[1].ToString()); 
       cmd.Parameters.AddWithValue("@emp", dtpEmployed.Value.ToShortDateString()); 
       cmd.Parameters.AddWithValue("@hired", dtpPromoted.Value.ToShortDateString()); 
       cmd.ExecuteNonQuery(); 
       MessageBox.Show("Information successfully saved!", "Information!", MessageBoxButtons.OK, MessageBoxIcon.Information); 
      } 

      sqc.Close(); 

什麼即時試圖做的是,如果列名DEPID子項目必須dep232和SALARYID是SAL 232

我嘗試在INSERT語句

   cmd.Parameters.AddWithValue("@dep", rr[0].ToString()); 
       cmd.Parameters.AddWithValue("@sal", rr[0].ToString()); 

這段代碼的輸出是列名DEPID它有子項sal243,它應該只有SALARYID 並且還有另一個DEPID是dep243的數據,但salaryID也有dep243。

+0

你到底想做什麼?兩張桌子之間沒有聯繫。這樣你最終會搞亂第三張表中的所有數據。 – Shahbaz

回答

0

好了,你有2個查詢,他們給你的部門ID和工資等級。如果這兩個查詢中的任何一個只返回一行,那麼你可以這樣做脫身:

 cmd.CommandText = @"select * from 
(
Select DepID 
from UserDept 
where Department [email protected] and Position [email protected] 
) a cross join 
(
Select SalaryID 
from Salaries 
where Gradenumber [email protected] and StepNumber [email protected] 
) b"; 

字符串開頭的@可以讓它運行多行,方便格式化和使sql更容易閱讀。

如果兩個查詢都返回多行,請不要這樣做。你必須將兩個表內聯在一起。在你的問題中沒有足夠的信息來確定如何去做;表格之間的關係並不明顯

有很好的理由避免使用AddWithValue,但這是一篇博文(您可以搜索它),而不是我可以在這裏輸入一行。儘管如此你基本上都會調用所有組合選定項目的字符串,而不會真正考慮數據庫中數據的類型。如果在數據庫中,像gradenumber這樣的東西存儲爲數字,至少應該調用addwithvalue並傳遞一個數值(即Convert.ToInt32(combo.selecteditem))而不是字符串(您當前的.ToString() ing方法)

+0

它返回兩行,但第一行的工資和部門ID具有相同的ID爲sal243,第二行也具有相同的項目(dep243)在列(工資&dep) 我真正想要發生的事情是給我一行,如果它的DEPID項只應該是dep243,而對於salaryID則應該是sal243。 –

+0

您將需要修改您的查詢,以便獲得的行數是您想要的行數。如果你想要一行,我會和243返回兩次,這是因爲兩行匹配你的where子句。修改where子句,只有一行匹配。做選擇*將有助於 –

+0

是的,這是我的問題ahaha。你可以爲我做或給我一個提示嗎? –

相關問題