PDA

View Full Version : سوال: مشکل Failed to enable constraints با dataset موقع کوئری گرفتن



asadegha
شنبه 26 فروردین 1391, 00:42 صبح
سلام دوستان

دارم یه برنامه مینویسم با معماری سه لایه.
تو لایه Data یه دیتاست دارم که برای یه جدولش یه کوئری از چند جدول گذاشتم.
و تو لایه Business یه متد(Select_view) گذاشتم که پارامترها رو میگیره و به متد(Select_CourseBase) مربوط به کوئری در لایه data میفرسته, اطلاعات برگشت داده شده رو هم به لایه View میفرسته.

حالا مسئله اینجاست که وقتی به صورت دستی متدSelect_CourseBase رو فرا خونی میکنم درست جواب میده ولی وقتی تو لایه متد Select_view اجرا میشه ارور زیر رو میده.

Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.

ولی درج و حذف و ویراش رو درست انجام میده.

این قضیش چیه؟ چیکارش کنم؟

asadegha
شنبه 26 فروردین 1391, 23:46 عصر
یعنی 14 نفر اومدن بازدید کردن هیچ اطلاعاتی نداشتن بدردم بخوره؟
اگه نمیدونین چرا اومدین؟ تعداد پاسخ ها که صفره.

cherchil_hra
یک شنبه 27 فروردین 1391, 09:20 صبح
خاصیت EnforceConstraints دیتاستت را برابر false قرار بده. علتش هم همونه که گفته یا فیلدت مقدار null نمیگیره ، یا کلید خارجی هست و یا باید مقدارش uniqe باشه
dataSet.EnforceConstraints=false;

حالا شما میگی که وقتی اجراش می کنی مشکل پیش نمیاد ولی توی برنامه این خطا را میده. احتمالا به خاطر relation باشه که سه حالت داره و دیتاست شما روی حالت یک یا دو باشه:


both relation and foreign key constraint
Foreign key constraint Only
Relation Only
1. هم ارتباط هست و هم تضمین می کنه که اگر کلید اصلی تغییر کرد یکپارچگی داده ها از بین نره(رفتارش را شما تعیین می کنی که تغییرات را اعمال بکنه یا نه)
2.ارتباط نیست و فقط هماهنگی کلید اصلی با کلید خارجی هست
3. ارتباط هست. اگر Relation شما روی حالت سوم باشه این خطا رو نخواهی داشت. ولی اگر کلید اصلی شما تغییر بکنه، تغییری در کلید خارجی شما داده نمیشه و یکپارچگی داده هات از بین میره و خطای دیتابیست را باید جمع و جور کنی!

اگر فایل دیتاست به برنامه ات اضافه می کنی می تونی از همون قسمت این تنظیمات را عوض کنی وگرنه با کدنویسی. اگر هم حوصله اش را نداری و مطمئن هستی که داده هات درست ثبت می شه (با حفظ یکپارچگی) از همون روش بالا استفاده کن.

این لینک هم راجع به این سه حالت هست: Introduction to DataRelation Object (http://msdn.microsoft.com/en-us/library/0k21zcyx%28vs.71%29.aspx)
موفق باشی!

samad1987
جمعه 28 تیر 1392, 00:30 صبح
میدونم جواب رو بعد از موعد هستش ولی خالی از لطف نیست
جواب این دوست عزیزمون کار میکنه ولی پاک کردن صورت مساله هستش چرا که توی دیتاگرید اون ردیف هایی که مشکلساز شدند رو توی گرید نمایش نمیده !!!( این آیا پاک کردن صورت مساله نیست؟)
جواب»
شما 100% مشکلتون مرتبط با کلید اصلی یا فرعی هستش
حالا »
این مشکل زمانی پیش میاد که کلید ترکیبی دارید یعنی ترکیب 2 تا فیلد کلید اصلی شمارو تشکیل میدند ! ولی خب این که اصولا نباید مشکلی پیش بیاره !! نه؟
پس مشکل چیه؟
مشکل اینه که شما اول کار یه دونه کلید واسه جدولتون گذاشتید بعد دیتاست رو ساختید بعد مدت زمانی تشخیص دادید که کلیدتون رو ترکیبی بسازید ولی یادتون رفته که کلید رو توی دیتاستتون هم تنظیم کنید و از دیدگاه دیتاست محترمه !! کلیدتون یه دونست !!

rasoulkhan2009
یک شنبه 26 مرداد 1393, 20:55 عصر
خاصیت EnforceConstraints دیتاستت را برابر false قرار بده. علتش هم همونه که گفته یا فیلدت مقدار null نمیگیره ، یا کلید خارجی هست و یا باید مقدارش uniqe باشه
dataSet.EnforceConstraints=false;

حالا شما میگی که وقتی اجراش می کنی مشکل پیش نمیاد ولی توی برنامه این خطا را میده. احتمالا به خاطر relation باشه که سه حالت داره و دیتاست شما روی حالت یک یا دو باشه:


both relation and foreign key constraint
Foreign key constraint Only
Relation Only
1. هم ارتباط هست و هم تضمین می کنه که اگر کلید اصلی تغییر کرد یکپارچگی داده ها از بین نره(رفتارش را شما تعیین می کنی که تغییرات را اعمال بکنه یا نه)
2.ارتباط نیست و فقط هماهنگی کلید اصلی با کلید خارجی هست
3. ارتباط هست. اگر Relation شما روی حالت سوم باشه این خطا رو نخواهی داشت. ولی اگر کلید اصلی شما تغییر بکنه، تغییری در کلید خارجی شما داده نمیشه و یکپارچگی داده هات از بین میره و خطای دیتابیست را باید جمع و جور کنی!

اگر فایل دیتاست به برنامه ات اضافه می کنی می تونی از همون قسمت این تنظیمات را عوض کنی وگرنه با کدنویسی. اگر هم حوصله اش را نداری و مطمئن هستی که داده هات درست ثبت می شه (با حفظ یکپارچگی) از همون روش بالا استفاده کن.

این لینک هم راجع به این سه حالت هست: Introduction to DataRelation Object (http://msdn.microsoft.com/en-us/library/0k21zcyx%28vs.71%29.aspx)
موفق باشی!


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