2017-01-30 30 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不是。 –

相关问题