[英]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.