2015-11-03 166 views
-3

我试图删除表NatureCharge外键引用了粉彩的表的主键,因为我需要在彩删除外键

删除多行删除多行,它的工作原理,但与问题删除行中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(); 
        } 
       } 
      } 

一个错误显示(这是彩部分)

cmd.ExecuteNonQuery();

附加信息:DELETE语句与参考约束“FK_NatureCharge_Famille”冲突。冲突发生在数据库“Tresorerie”,表“dbo.NatureCharge”,列'IdFam'。

+1

不要编辑你的问题,并无效已经给出的答案! –

+0

对不起,这是以前的错误,所以我修改了,但忘了补充新的错误,再次抱歉 – Amin

+0

还声明哪个删除语句不正确。 – 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

我觉得删除语句不正确,如何添加@IdNat参数? – Amin