从2个相关表中删除行

时间:2014-05-08 14:45:15

标签: c# sql sql-server database

我的数据库(Echipa和Staff)中有2个与关系连接的表。 enter image description here

要在我的表格中添加一行,我只需添加第一行,然后添加第二行

private void AddElement(string nume, string an, string tara, string antrenor, string presedinte, string actionar)
{
    conexiune.Open();
    Comanda comanda = new Comanda("insert into echipa values( @nume, @an,@tara)", conexiune);
    comanda.Parameters.Add(new SqlParameter("@nume", nume));
    comanda.Parameters.Add(new SqlParameter("@an", an));
    comanda.Parameters.Add(new SqlParameter("@tara", tara));
    comanda.ExecuteNonQuery();


    comanda = new Comanda("insert into staff values( @antrenor,@presedinte,@actionar)", conexiune);
    comanda.Parameters.Add(new SqlParameter("@antrenor", antrenor));
    comanda.Parameters.Add(new SqlParameter("@presedinte", presedinte));
    comanda.Parameters.Add(new SqlParameter("@actionar", actionar));
    comanda.ExecuteNonQuery();

    conexiune.Close();
    MessageBox.Show("Succes");
}

但是如果我想从两者中删除一行来更新一行呢? 我该怎么办?

我不知道为什么,但我甚至无法从1张表中删除

private void DeleteElement(string nume)
{
    conexiune.Open();
    Comanda comanda = new Comanda("delete from echipa where 'nume'=@nume", conexiune);
    comanda.Parameters.Add(new SqlParameter("@nume", nume));

    comanda.ExecuteNonQuery();

    conexiune.Close();
    MessageBox.Show("Succes");
}

这对我的桌子不起作用..

4 个答案:

答案 0 :(得分:3)

最好的方法是在两个表之间的外键上设置级联删除。这样,当您从主表中删除行时,第二个表中的所有子行都将被自动删除。

答案 1 :(得分:2)

试试这个。在" echipa"。

之后定义列
conexiune.Open();
    Comanda comanda = new Comanda("insert into echipa(nume, an, tara) values( @nume, @an,@tara)", conexiune);
    comanda.Parameters.Add(new SqlParameter("@nume", nume));
    comanda.Parameters.Add(new SqlParameter("@an", an));
    comanda.Parameters.Add(new SqlParameter("@tara", tara));
    comanda.ExecuteNonQuery();

答案 2 :(得分:2)

我找到了解决方案。

我有两张桌子 Echipa - 将EID(int)作为主键和自动编号 员工 - 有SID(int)只是自动编号

首先,我必须从工作人员中删除该行,然后从Echipa删除它并且它有效! 在某个地方,我使用Comanda = System.Data.SqlClient.SqlCommand,对我来说更容易)并且是我的语言)

 private void StergeElement(string nume)
    {
        conexiune.Open();


        Comanda comanda = new Comanda("delete from staff where SID=@ID", conexiune);
        comanda.Parameters.Add(new SqlParameter("@ID", nume));

        comanda.ExecuteNonQuery();

         comanda = new Comanda("delete from echipa where EID=@ID", conexiune);
        comanda.Parameters.Add(new SqlParameter("@ID", nume));

        comanda.ExecuteNonQuery();



        conexiune.Close();
        MessageBox.Show("Succes");
    }

感谢@apomene的回答,它对我有所帮助!

答案 3 :(得分:1)

如果没有删除,(我猜您的字段名称为nume),您只需删除引号:

Comanda comanda = new Comanda("delete from echipa where nume=@nume", conexiune);
        comanda.Parameters.Add(new SqlParameter("@nume", nume));

        comanda.ExecuteNonQuery();