2017-01-30 3 views
1

Вот мой код. Я пытаюсь получить результат SQL-запроса, хранящегося в переменной query1, и хочу использовать этот результат в запросе SQL, хранящемся в переменной query. Messagebox не имеет значения, я просто написал его, чтобы узнать, получаю ли я правильные результаты из спискаbox1 или нет. Если я жестко задал результат запроса1 в параметрах команды, он отлично работает.Получение результата запроса в переменную, а затем передача его команде

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. один из них выбирает другой, является инструкцией insert, мне нужны параметры для вставки, чтобы он знал, что он собирается вставить. Я не вижу, почему мне нужны параметры для другого. –

+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 im, пытающийся перейти в команду, и есть таблица регистрации, которая связывает груды со студентами, и все они имеют данные внутри. –

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

i get/Инструкция INSERT противоречит ограничению FOREIGN KEY/когда я использую это и решение ниже. Я пробовал это сам раньше, но я не понять, почему он не работает. Если я жестко кодирую результат query1 в эту команду, он отлично работает. –

+0

вы проверили, действительно ли query1 возвращает правильный идентификатор? – Geoman

+0

Да, он возвращает идентификатор, который я хочу, но я не могу заставить его работать в событии buttonClick. –

2

Вам нужно только одну команду SQL. Структура будет выглядеть так:

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

Значение1 зависит от пользователя, поэтому я не могу использовать select в insert.User выбирает грубый из списка, а затем щелкает add, кнопка должна получать грубый идентификатор и регистрироваться в идентификаторе студента пользователей, а затем вставлять их в таблицу регистрации. поэтому value1 - выбор пользователей, а value2 - нет. –

Смежные вопросы