2017-01-30 32 views
1

這是我的代碼。我試圖獲得存儲在query1變量中的SQL查詢的結果,並且想要將結果用於存儲在query變量中的SQL查詢。 Messagebox是不相關的,我只是寫了它,看看我是否從listbox1得到正確的結果。如果我將query1的結果硬編碼爲命令參數,它完美地工作。獲取查詢結果到一個變量,然後將其傳遞給一個命令

private void btnAddCoarse_click(object sender, EventArgs e) 
{ 
    MessageBox.Show(listBox1.SelectedItem.ToString()); 


    string query1 ="SELECT ogrenciNo FROM ders,ogrenci,Enrollment WHERE ogrenciId=ogrenciNo AND dersId=dersKodu AND ogrenci.email='" + mainform.Username + "' AND Enrollment.dersId='"+listBox1.SelectedValue+"'"; 
    string query = "INSERT INTO Enrollment(dersId,ogrenciId) VALUES (@dersId, @ogrenciId)"; 

    using (connection = new SqlConnection(connectionString)) 
    using (SqlCommand command = new SqlCommand(query, connection)) 
    { 
     connection.Open(); 

     command.Parameters.AddWithValue("@dersId", listBox1.SelectedValue); 
     command.Parameters.AddWithValue("@ogrenciId",//this is where i need the query1//); 
     command.ExecuteNonQuery(); 
     PopulateList2(); 
    } 
} 
+2

您可以使用參數與第二查詢,但不是第一? - 爲兩個做! –

+0

@AlexK。其中一個是選擇另一個是插入語句,我需要插入參數,以知道它將插入什麼。我不明白爲什麼我需要其他參數。 –

+0

@PoyrazKürkçüoğlu使用sql參數是一種很好的做法,對於避免sql注入是強制性的 – apomene

回答

0

嘗試這樣做

private void btnAddCoarse_click(object sender, EventArgs e) 
{ 
     //MessageBox.Show(listBox1.SelectedItem.ToString()); 


     string query1 ="SELECT ogrenciNo FROM ders,ogrenci,Enrollment WHERE ogrenciId=ogrenciNo AND dersId=dersKodu AND ogrenci.email='" + mainform.Username + "' AND Enrollment.dersId='"+listBox1.SelectedValue+"'"; 
     string query = "INSERT INTO Enrollment(dersId,ogrenciId) VALUES (@dersId, @ogrenciId)"; 



     using (connection = new SqlConnection(connectionString)) 
     { 
      int result=0; 
      using (SqlCommand command = new SqlCommand(query1, connection)) 
      { 
       connection.Open(); 

       result=Convert.ToInt32(command.ExecuteScalar()); 
       connection.Close(); 
      } 
      using (SqlCommand command = new SqlCommand(query, connection)) 
      { 
       connection.Open(); 

       command.Parameters.AddWithValue("@dersId", listBox1.SelectedValue); 
       command.Parameters.AddWithValue("@ogrenciId",result); 
       command.ExecuteNonQuery(); 
       PopulateList2(); 
      } 
     } 

} 
+0

INSERT語句與FOREIGN KEY約束衝突@hdkhardik –

+0

請檢查您的數據,您是否在其他表中嘗試插入值? – hdkhardik

+0

是的,有一個學生表有ID即時通訊命令,並有一個與學生關聯的大學生的登記表,他們都有數據裏面。 –

1
int id; 
using (connection = new SqlConnection(connectionString)) 
      using (SqlCommand command = new SqlCommand(query1, connection)) 
      { 
      connection.Open(); 
      id = Convert.ToInt32(command.ExecuteScalar()); //I guess it returns only 1 id?.. 
      } 
+0

我得到/ INSERT語句與FOREIGN KEY約束衝突/當我使用這個和下面的解決方案時。我以前自己試過,但是我沒有理解它爲什麼不起作用。如果我將查詢1的結果硬編碼到該命令中,它完美地工作。 –

+0

你檢查了,如果query1實際返回正確的ID? – Geoman

+0

是的,它會返回我想要的id,但我無法讓它在buttonClick事件中工作。 –

2

你只需要一個SQL命令。該結構是這樣的:

insert into table2 
(field1, field2) 
select value1, value2 
etc 
+0

value1依賴於用戶,所以我不能在insert.User中選擇一個select從用戶列表框中選擇一個粗略的,然後點擊add,按鈕應該得到粗略的ID並登錄用戶學生ID,然後將它們插入到登記表中。所以value1是用戶選擇,但value2不是。 –

相關問題