ورود

View Full Version : مشکل در Delete کردن



mary3541
جمعه 22 خرداد 1388, 19:38 عصر
توب برنامم یه جدول به نام Teacher دارم که دارای یک فیلد به نام Teacher_ID است و یه جدول به نام Term Teacher که دارای فیلدی به نام TermTeacher_ID و Teacher_ID_FK (کلید خارجی)است.
وقتی که میخوام تو برنامم حذف یک استاد رو انجام بدم با اینکه از یک استاد (مثلا با ID =2 ) توی جدول TermTeacher استفاده شده وقتی که میخوام اون استاد رو از جدول Teacher پاک کنم اونو پاک میکنه با اینکه طبق روابطی که داره نباید اونو پاک کنه.میشه بگید کجای کارم اشتباهه؟
کد برنامم اینه
تو برنامم


private void btnDelete_Click(object sender, EventArgs e)
{
this.dgv.DataSource = ds.Tables["Teacher"];
DataRowView drv = (DataRowView)this.BindingContext[ds.Tables["Teacher"]].Current;

DialogResult dr = MessageBox.Show("™آیا مایل به حذف هستید؟", "",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2);
if (dr == DialogResult.Yes)
{

objteach.deletTeacher(drv);
}
}

کد delet teacher تو لایه businesslayer


public void deletTeacher(DataRowView drv)
{
objteach.deletTeacher(drv);
}

کد deletTeacher تو لایه DataLayer


public void deletTeacher(DataRowView drv)
{
int rowid = (int)drv.Row["Teacher_ID"];
drv.Delete();
SqlCommand cmd = new SqlCommand("delete from Teacher where Teacher_ID=@Teacher_ID", con);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@Teacher_ID", Teacher_ID);
con.Open();
cmd.ExecuteNonQuery();
con.Close();

}

SMRAH1
جمعه 22 خرداد 1388, 20:13 عصر
سلام

مطمئن هستید که "کلید خارجی" بودن رو چه توی پایگاه داده و چه توی DataSet تعریف کرده اید؟
در ضمن،من توصیه می کنم خودتون توی کد برنامه ،وجود یا عدم وجود این فیلد رو تست کنید و بعد اقدام به حذف کنید

موفق باشید

programmable
جمعه 22 خرداد 1388, 20:22 عصر
احتمالا تو دیتا بیس رابطه رو تعریف نکرده اید برای این کار می تونید تو قسمت دیاگرام دو جدول رو وارد کنید و ارتباط بین این دو برقرار کنید و جدول کلید خارجی و کلید اصلی را مشخص کنید و Cascade رو هم در صورت تمایل تخصیص بدید .

mary3541
جمعه 22 خرداد 1388, 22:17 عصر
این شکل جدولامه

mary3541
جمعه 22 خرداد 1388, 22:22 عصر
سلام

در ضمن،من توصیه می کنم خودتون توی کد برنامه ،وجود یا عدم وجود این فیلد رو تست کنید و بعد اقدام به حذف کنید

موفق باشید

چجوری باید تست کنم؟

SMRAH1
شنبه 23 خرداد 1388, 01:09 صبح
سلام

یک qurey روی CourseTermTeacher بنویسید و تعداد رکوردهایی که theacher_ID-Fk اونها برابر با Theacher_ID مد نظر است بدست بیارید.حالا کافیه ببینید که این عدد صفر است یا نه؟
اگر صفر بود ،اقدام به حذف کنید و در غیر اینصورت عملیات حذف را لغو کنید.

موفق باشید