ورود

View Full Version : وارد کردن و بروز رسانی جداول رابطه ای.



hdv212
چهارشنبه 02 اردیبهشت 1388, 14:56 عصر
با سلام
اگه تا حالا با TableAdapter کار کرده باشید، میبینید که در TableAdapterهای شما یک کلاسی به نام TableAdapterManager داره که دارای متدی به نام UpdateAll هست که میتونید جداول رابطه ای رو به روز رسانی کنید، منتها پس از تغییراتی که در دیتاست ایجاد میکنم و ذخیره میکنم، خطای زیر رو در زمان فراخوانی متد مورد (TableAdapterManager.UpdateAll) نظر میده :


Concurrency violation: the UpdateCommand affected 0 of the expected 1 records
دو جدول Customers و Orders هست که در runTime یه رکورد به Customers و یکی دو تا Order هم برای همون Customer تعریف میکنم، فیلد CustomerID هم int و identity هست و کسی هم با دیتابیس کار نمیکنه که Conflict ای ایجاد بشه. با SqlProfiler هم دستورات رو دیدم، به صورت دستی اجرا میشن، نمیدونم هر کاری کردم نشد، کسی از دوستان تجربه کار با این روش رو داشته ؟

esmaeily-hosein
چهارشنبه 02 اردیبهشت 1388, 16:09 عصر
نکته : باید Insert Command دارای مقدار بازگشتی @@Identity باشد . تا بهت درست جواب بده .اگز از sql builder هم استفاده میکنی باید در runtime خودت اونو بهش اضافه کنی . Tds فعلا از این گیرا نداره .

hdv212
پنج شنبه 03 اردیبهشت 1388, 17:16 عصر
نکته : باید Insert Command دارای مقدار بازگشتی @@Identity باشد . تا بهت درست جواب بده .اگز از sql builder هم استفاده میکنی باید در runtime خودت اونو بهش اضافه کنی . Tds فعلا از این گیرا نداره .

ممنون بابت پاسخ و معذرت بابت تاخیر
خدمت شما عرض کنم که من از TableAdapter استفاده میکنم و از CommandBuilder استفاده نمیکنم (تمام دستورارت مربوطه توسط ویژوال استودیو در DataSet Designer ساخته شده).
من فیلد Primary Key رو عوض کردم و از نوع uniqueidentifier در نظر گرفتم تا احتمال Conflict در دیتابیس به حداقل برسه، مشکل حل شد، ولی زمانی که از Procedure برای عملیات CRUD در DataSet Designer استفاده میکنم، خطای زیر رو میده که فکر کنم همون مشکله :

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Orders_Customers". The conflict occurred in database "Test2", table "dbo.Customers", column 'CustomerID'.
The statement has been terminated.

کسی راه حلی برای کار با TableAdapter و داده های رابطه ای داره ؟
ممنون

esmaeily-hosein
یک شنبه 06 اردیبهشت 1388, 17:00 عصر
همونطور که گفتم در Ds نیز این مشکل وجود دارد و باید به آخر Insert Command خود در TableAdapter مقدار @@Identity اضافه گردد . به صورت پیش فرض نیست . در این مورد نیز داستان فرق نمیکند و باید مقدار newID() برگردانده شود .
کافیست به صورت دستی در زمان Design اینکارو بکنی .