• 1397/12/22

خطای The conflict occurred in database :

با سلام و خسته نباشید

کد کامل خطا :

SqlException: The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Commoditys_Depots". The conflict occurred in database "RubikAccountig_DB", table "dbo.Depots", column 'IDDepot'.
The statement has been terminated.

من 3 جدول دارم 1- ثبت مشخصات انبارها با کلید اصلی آی دی انبار 2- ثبت مشخصات واحد کالاها  با کلید اصلی آی دی واحد 3- ثبت مشخصات کالاها با کلید اصلی آی دی کالا که درونش یک فیلد برای گرفتن اینکه این کالا درون کدام انبار است و دو فیلد برای گرفتن 2 واحد کالا از جدول واحد کالاها میباشد.

حالا 3 رابطه ی Relationship بدین شکل براشون تعریف کردم :

1- کلید اصلی جدول انبار به فیلد آی دی انبار در جدول مشخصات کالاها

2- کلید اصلی جدول واحد به فیلد واحد1 در جدول مشخصات کالاها

3- مجدد کلید اصلی جدول واحد به فیلد واحد2 در جدول مشخصات کالاها

که به نظرم باید یک مشکلی داشته باشه و خطا بابت همین مساله هست که نمیزاره موقع اضافه کردن یک کالا عملیات save انجام شود و خطای فوق را میدهد. به نظرم باید یک جدول واسط بین این 3 درست کنم که به 4 جدول افزایش پیدا کنه و آی دی مشخصات کالا را هم داخل جدول 4 داشته باشم.اگر این قضیه درست است آیا راهی دیگری هم به غیر از انجام تولید جدول 4 هم وجو دارد یا خیر ؟ 

یا اینکه از Cascade استفاده کنم که در این صورت هم نمیشود مثلا 2 فیلد را به یک فیلد جدول دیگر Cascade کرد و زمان ارسال کد برای ویرایش یا اضافه کردن از طریق سی شارپ خطا در فیلد دوم را میدهد.

ممنون میشوم  لطفا راهنمایی بفرمایید... با تشکر

  • 1397/12/22
  • ساعت 11:45

سلام

کی این ارور رو دریافت میکنید ؟

به نظرم طراحیت درسته

فقط موقعی که داری اینسرت میکنی آی دی کلید خارجی رو میفرستی که تو جدولت نیست


  • 1397/12/22
  • ساعت 12:09

دقیقا زمانی که میخوام insert کنم این ارور میاد.

دیاگرام :

 

کد insert :  

   DataLayer.Commoditys commoditys = new DataLayer.Commoditys()
                    {
                        NAMECommodity = txtName.Text,

                        IdVAAHEDCommodity1 = int.Parse(cBoxJoz.SelectedValue.ToString()),
                        IdVAAHEDCommodity2 = int.Parse(cBoxKol.SelectedValue.ToString()),
                        IdDEPOTCommodity = int.Parse(cBoxAnbaar.SelectedValue.ToString()),
                    };

 


  • 1397/12/22
  • ساعت 12:12

احتمالا ساختار جداول با مدل شما همخوانی نداره 

کلید های اصلی جداول رو نیز بررسی کنید


  • 1397/12/22
  • ساعت 12:29

ارادتمندم جناب مهندس 

ساختار جداول را خدمتتان ارسال میکنم . ممنون میشم بررسی بفرمایید.

جدول مشخصات کالا :

جدول انتخاب انبار:

و درنهایت جدول انتخاب واحد های 1 و 2 کالا :


  • 1397/12/22
  • ساعت 12:57

در جدول مشخصات کالا AllowNulls فیلد های دارای کلید خارجی رو برداشتم و درست شد.

ممنون از شما


  • 1397/12/22
  • ساعت 17:44

مجدد عرض ادب

ببخشید همانطور که خدمتتان عرض کردم مشکل بصورت کلی حل شد اما یک مشکل دیگه بوجود اومد که البته راهکاری به نظرم میرسه و میشه حلش کرد اما خواستم بدونم که بهترین راه حل چی میتونه باشه.

ببینید من میخواهم مقدار null هم برای فیلدهایی که در بالا گفتم داشته باشم و AllowNulls تیک دار شود ولی چون برای تعیین انبار از کمبو باکس استفاده کردم و یک آی دی صفر هم در برنامه به لیست انبارها  با عنوان لطفا انتخاب کنید اضافه کردم زمانیکه میخواهم مثلا کالا بدون انبار باشد بر روی فیلد با آی دی صفر قرار گرفته و مقدار آی دی صفر را به بانک ارسال میکند و این در صورتیست که در بانک آی دی صفر وجود ندارد و باعث خطا میشود.  با توجه به اینکه در زمان تعریف جدول مورد نظر و پر کردن رکوردهای جدول در سی شارپ نمیتوان از دستور شرطی درون بلوکه ها استفاده کرد بهترین راه حل برای رفع این مشکل که در زمان برابر شدن آی دی صفر هیچ مقداری به بانک ارسال نشودچی میتونه باشه؟  ممنونم میشم راهنمایی بفرمایید. با سپاس


logo-samandehi