DataSet-Delete DBConcurrencyException
-
כאשר אני מוחק שורות מהדטה סט בטבלת הבנים ולאחר מכן אני בא לעדכן בבסיס הנתונים
עולה לי השגיאה שלהלן
אני מצרף קוד ותמונות להשלמת הבנת הענייןבמקרה שלהלן אני מוחק רק את השורות של טבלת האב בדטה סט וממיילא על ידי ההגדרה בקשר גומלין נמחקים שורות הילדים
כל הבעיה היא כאשר אני עושה אפדיטמקווה שהסברתי ברור
אשמח אם מישהוא יוכל לעזור
תודהif (teudaLetipul.GetParentTableRows().Count() > 0) { while (teudaLetipul.GetGetParentTableRows().Length > 0) { teudaLetipul.GetGetParentTableRows()[0].Delete(); } dta_childarenTable.Update(dts.childarenTable); dta_GetParentTable.Update(dts.GetParentTable); }
פורסם במקור בפורום CODE613 ב18/12/2013 19:25 (+02:00)
-
השגיאה הזאת בעצם אומרת, אני לא יודעת מה קרה, אבל תכלס לא נעשו שינויים במסד אפי' שלטעמי היו צריכים להיעשות.
במקרה זה היא מצביעה שהייתה שורה אחת שאמורה להיות מושפעת, ובכל אופן המסד אמר ש0 שורות הושפעו.מה שחשוב לראות זה מה קרה באמת במסד, ייתכן שפשוט מנסים למחוק פעמיים אותה שורה וכו'.
כדאי גם לעקוב אחרי שורה ספציפית ולראות את מצבה לפני הUpdate. מצבה אני מתכוון לRowState שלה.במקרה זה הבדיקה תהיה ע"י BreakPoint בשורת הUpdate, וכתיבה ב Immediate window:
? dts.childarenTable.GetChange().Rows[0].RowState
בנוסף, הערה על הקוד שלך:
עשית לולאה מאוד טריקית. היא מוחקת כל פעם שורה ראשונה, ועושה זאת שוב אם ישנם עוד שורות.
היא גם מפעילה על כל איטרציה פעמיים פונקציה GetXXXRows.
דרך טבעית יותר זה ככה:foreach (var row in teudaLetipul.GetGetParentTableRows()) { item.Delete(); }
פורסם במקור בפורום CODE613 ב18/12/2013 20:38 (+02:00)