簡體   English   中英

如何修復:UPDATE語句與FOREIGN KEY SAME TABLE約束沖突

[英]How to fix: The UPDATE statement conflicted with the FOREIGN KEY SAME TABLE constraint

我從我的C#代碼中創建了一個更新語句。 現在我有了它的工作,但我需要在我的班級中添加一個構造函數。 既然我添加了構造函數,它就不再起作用了。

如果我不做一個構造,它確實有效

namespace FontysHotel
{
    public class Medewerker
    {
        //instantie variabelen
        private int id;
        private string naam;
        private string functie;
        private DateTime datum_in_dienst;
        private string telefoonnummer;
        private string email;
        private string wachtwoord;
        private int hotelid;
        private int managementid;

        //proporties
        public int Id
        {
            get { return id; } set { id = value; }
        }
        public string Naam
        {
            get { return naam; } set { naam = value; }
        }
        public string Functie
        {
            get { return functie; } set { functie = value; }
        }
       public DateTime Datum_in_dienst
        {
            get { return datum_in_dienst; } set { datum_in_dienst = value; }
        }
        public string Telefoonnummer
        {
            get { return telefoonnummer; } set { telefoonnummer = value; }
        }
        public string Email
        {
            get { return email; } set { email = value; }
        }
        public string Wachtwoord
        {
            get { return wachtwoord; } set { wachtwoord = value; }
        } 
        public int Hotelid
        {
            get { return hotelid; } set { hotelid = value; }
        }
        public int Managementid
        {
            get { return managementid; } set { managementid = value; }
        }
        //constructor
        public Medewerker(int id, string naam, string functie, DateTime datum_in_dienst, string telefoonnummer, string email, string wachtwoord, int hotelid, int mangementid)
        {
            Id = id;
            Naam = naam;
            Functie = functie;
            Datum_in_dienst = datum_in_dienst;
            Telefoonnummer = telefoonnummer;
            Email = email;
            Wachtwoord = wachtwoord;
            Hotelid = hotelid;
            Managementid = managementid;
        }


    }
}

方法

 public static void UpdateSchoonmaker(int id, string naam, string functie, DateTime datum_in_dienst, string telefoonnummer, string email,string wachtwoord, string hotelid, string managementid )
        {
            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand("update medewerker set medewerkerid = " + id + ", naam ='" + naam + "',functie ='" + functie + "',datum_in_dienst = '" + datum_in_dienst + "',telefoonnummer =" + telefoonnummer + ",email ='" + email + "', wachtwoord ='" +wachtwoord+ "',hotelid = "+hotelid+", managementid ="+managementid+" where medewerkerid =" + id, conn);
                SqlDataReader reader;
                reader = cmd.ExecuteReader();
            }
        }

參與getallstaf的構造函數

public static List<Medewerker> Getmedewerker()
        {
            var result = new List<Medewerker>();
            using (var conn = new SqlConnection(ConnectionString))
            {
                conn.Open();
                const string query = "Select * from medewerker where functie = 'schoonmaak'";
                SqlCommand selectMedewerker = new SqlCommand(query, conn);
                SqlDataReader reader = selectMedewerker.ExecuteReader();
                while (reader.Read())
                {
                    Medewerker mdw = new Medewerker((int)reader["medewerkerid"], (string)reader["naam"], (string)reader["functie"], (DateTime)reader["datum_in_dienst"], (string)reader["telefoonnummer"], (string)reader["email"], (string)reader["wachtwoord"], (int)reader["hotelid"], (int)reader["managementid"]);
                    //mdw.Id = (int)reader["medewerkerid"];
                    //mdw.Naam = (string)reader["naam"];
                    //mdw.Functie = (string)reader["functie"];
                    //mdw.Datum_in_dienst = (DateTime)reader["datum_in_dienst"];
                    //mdw.Telefoonnummer = (string)reader["telefoonnummer"];
                    //mdw.Email = (string)reader["email"];
                    //mdw.Wachtwoord = (string)reader["wachtwoord"];
                    //mdw.Hotelid = (int)reader["hotelid"];
                    //mdw.Managementid = (int)reader["managementid"];
                    result.Add(mdw);
                }
                reader.Close();
            }
            return result;
        }

從datagrid獲取信息的代碼

 private void DgSchoonmedewerker_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            DataGrid dg = (DataGrid)sender;
            var row_selected = dg.SelectedItem as Medewerker;
            if (row_selected != null)
            {
                medewerkerid = row_selected.Id;
                tbNaamSchoon.Text = row_selected.Naam;
                tbTelefoonSchoon.Text = row_selected.Telefoonnummer;
                tbEmailSchoon.Text = row_selected.Email;
                tbWachtSchoon.Text = row_selected.Wachtwoord;
                cbHotelSchoonmaak.Text = row_selected.Hotelid.ToString();
                cbManagerSchoonmaak.Text = row_selected.Managementid.ToString();
                dpDatumindienst.SelectedDate = row_selected.Datum_in_dienst;
            }
        }

現在這樣,如果我點擊datagrid中的任何內容,它會將信息填充到文本框中。 下一個代碼是我如何將代碼發送到Update方法

 Database.UpdateSchoonmaker(medewerkerid, tbNaamSchoon.Text, "Schoonmaak",Convert.ToDateTime(dpDatumindienst.SelectedDate), tbTelefoonSchoon.Text, tbEmailSchoon.Text, tbWachtSchoon.Text, cbHotelSchoonmaak.Text, cbManagerSchoonmaak.Text);

首先,我使用公共靜態列表getmedewerker來加載信息。 這可能是在管理者中出現錯誤的錯誤。 因為你可以在第一個截圖中看到它們都設置為0,而在sql server express中它們確實有一個值。 現在,如果我點擊datagrid中的某些東西,那么managerid的combox也不會自動填充,如果我manaul選擇一個managerid,那么它會向managerid添加0。 如果我不在新的medewerker中放置任何內容並取消注釋mdw.XXX =並注釋構造函數,則更新確實有效

我希望它能更新表格中的一行。 但是,如何將構造函數添加到類並生成更新語句,以便我不會收到此錯誤消息

編輯 在此輸入圖像描述 在此輸入圖像描述

我建議對面向對象的編程做一些研究。 我沒有測試過這個,但它應該非常接近我猜你想要的東西。

public class Medewerker
{
    //instantie variabelen
    public int id {get;}
    public string naam {get; set;}
    public string functie {get; set;}
    public DateTime datum_in_dienst {get; set;}
    public string telefoonnummer {get; set;}
    public string email {get; set;}
    public string wachtwoord {get; set;}
    public int hotelid {get; set;}
    public int managementid {get; set;}

    //constructor
    public Medewerker(int id, string naam, string functie, DateTime datum_in_dienst, string telefoonnummer, string email, string wachtwoord, int hotelid, int mangementid)
    {
        Id = id;
        Naam = naam;
        Functie = functie;
        Datum_in_dienst = datum_in_dienst;
        Telefoonnummer = telefoonnummer;
        Email = email;
        Wachtwoord = wachtwoord;
        Hotelid = hotelid;
        Managementid = managementid;
    }

    public static void UpdateSchoonmaker()
    {
        using (SqlConnection conn = new SqlConnection(ConnectionString))
        {
            conn.Open();
            SqlCommand cmd = new SqlCommand("update medewerker set naam ='" + this.naam + "',functie ='" + this.functie + "',datum_in_dienst = '" + this.datum_in_dienst + "',telefoonnummer =" + this.telefoonnummer + ",email ='" + this.email + "', wachtwoord ='" +this.wachtwoord+ "',hotelid = "+this.hotelid+", managementid ="+this.managementid+" where medewerkerid =" + id, conn);
            cmd.ExecuteNonQuery();
        }
    }
}

然后在你想要調用方法的任何區域

var myMedewerker = new Medewerker(0, "Matt", ...);
myMedewerker.naam = "James";
myMedewerker.UpdateSchoonmaker();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM