2015-11-03 3 views
-3

Я попытался удалить внешний ключ в таблице NatureCharge, относя- для первичного ключа таблицы Famille, потому что мне нужно удалить несколько строк в FamilleУдалить иностранный ключ

Для удаления нескольких строк, он работает, но проблема с удаление строки в NatureCharge таблицы похожи, что enter image description here
кодекса:

private void DeleteFamBtn_Click(object sender, EventArgs e) 
    { 
     List<DataGridViewRow> selectedRows = (from row in DataGridViewFamille.Rows.Cast<DataGridViewRow>() 
               where Convert.ToBoolean(row.Cells["checkBoxColumn"].Value) == true 
               select row).ToList(); 


     if (MessageBox.Show(string.Format("Do you want to delete {0} rows?", selectedRows.Count), "Confirmation", MessageBoxButtons.YesNo) == DialogResult.Yes) 
     { 
      //delete Nature de Charge before delete Famille 
      foreach (DataGridViewRow row in selectedRows) 
      { 
       try 
       { 
        using (SqlConnection con = new SqlConnection(connstring)) 
        { 
         con.Open(); 
         using (SqlCommand command = new SqlCommand("DELETE NatureCharge FROM NatureCharge n INNER JOIN Famille f on n.IdFam = f.IdFam WHERE IdNat = @IdNat", con)) 
         { 
          command.ExecuteNonQuery(); 
         } 
         con.Close(); 
        } 
       } 
       catch (SystemException ex) 
       { 
        MessageBox.Show(string.Format("An error occurred: {0}", ex.Message)); 
       } 
      } 

      //Delete Famille 
      foreach (DataGridViewRow row in selectedRows) 
      { 
       using (SqlConnection con = new SqlConnection(connstring)) 
       { 
        using (SqlCommand cmd = new SqlCommand("DELETE FROM Famille WHERE IdFam = @IdFam", con)) 
        { 
         cmd.CommandType = CommandType.Text; 
         cmd.Parameters.AddWithValue("@IdFam", row.Cells["IdFam"].Value); 
         con.Open(); 
         cmd.ExecuteNonQuery(); 
         con.Close(); 
        } 
       } 
      } 

ошибка показывает, с линией (это для Famille части)

cmd.ExecuteNonQuery();

Дополнительная информация: Операция DELETE противоречила ограничению REFERENCE "FK_NatureCharge_Famille". Конфликт произошел в базе данных «Tresorerie», таблице «dbo.NatureCharge», в столбце «IdFam».

+1

не отредактируйте ваш вопрос и не сделайте недействительным уже предоставленные ответы !!! –

+0

извините, что это была предыдущая ошибка, поэтому я изменил, но забыл убрать новую ошибку, извините еще раз – Amin

+0

Также указано, что инструкция Delete неверна. – MethodMan

ответ

2

Вы забыли добавить @IdNat параметр здесь:

using (SqlCommand command = new SqlCommand("DELETE NatureCharge FROM NatureCharge n INNER JOIN Famille f on n.IdFam = f.IdFam WHERE IdNat = @IdNat", con)) 
{ 
    // you haven't added the @IdNat parameter 
    command.ExecuteNonQuery(); 
} 

Это будет более очевидным, если вы прибрано код.

string sql = "DELETE NatureCharge 
       FROM NatureCharge n 
       INNER JOIN Famille f on n.IdFam = f.IdFam 
       WHERE IdNat = @IdNat"; 
          ^^^^^^ 
using (SqlCommand command = new SqlCommand(sql, con)) 
{ 
    // you haven't added the @IdNat parameter 
    command.ExecuteNonQuery(); 
} 
+0

Оператор DELETE не кажется правильный – Steve

+1

, что не было оригинального вопроса ... –

+0

Я думаю, что инструкция delete не верна, как добавить параметр @IdNat ?? – Amin

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