نمایش نتایج 1 تا 4 از 4

نام تاپیک: خطا هنگام آپدیت کردن آداپتر در شبکه

  1. #1

    خطا هنگام آپدیت کردن آداپتر در شبکه

    یک سیستم دارم که چندکاربر همزمان با اون کار میکنند با یک بانک اکسس در سرور
    یک تیبل به یک دیتاگرید بایند کردم و تغییرات اون با ()dataadapter.update آپدیت میکنم.
    وقتی دو کاربر همزمان یک کورد تغییر میدن و یکی زودتر آپدیت میکنه
    برای نفر دوم خطا میده و میگه رکوردی آپدیت نشد
    چجوری جلوی این خطا رو بگیرم؟

  2. #2
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727
    برای نفر دوم خطا میده و میگه رکوردی آپدیت نشد
    این پیغام رو احتمالا خودتون تنظیم کردید، باید ببینید Exception اصلی و پیامش چیه، احتمالا باید Connection اون user اولی بسته بشه یا تغییراتش Commit بشه تا رکورد مورد نظر از حالت lock شده خارج بشه، احتمالات زیادی وجود داره باید دقیقا پیغام خطا رو بررسی کرد، (منظورم پیغام خطای اصلی برنامه س نه پیغامی که شما براش تنظیم کردید)

  3. #3
    نه من ترجمه پیغامی که میده گفتم:

    Concurrency violation: the UpdateCommand affected 0 of the expected 1 records.

    ولی فکر میکنم با آپدیت کردن کاربر اول دیگه ایم رکورد از حالت آماده برای آپدیت خارج میشه و آپدیت دوم دگه رکوردی ندار آپدیت کنه!

  4. #4
    نقل قول نوشته شده توسط Mrs.Net مشاهده تاپیک
    یک سیستم دارم که چندکاربر همزمان با اون کار میکنند با یک بانک اکسس در سرور
    یک تیبل به یک دیتاگرید بایند کردم و تغییرات اون با ()dataadapter.update آپدیت میکنم.
    وقتی دو کاربر همزمان یک کورد تغییر میدن و یکی زودتر آپدیت میکنه
    برای نفر دوم خطا میده و میگه رکوردی آپدیت نشد
    چجوری جلوی این خطا رو بگیرم؟

    سلام.
    به این مساله میگن Concurrency Control! یعنی دو یا چند کاربر با هم دیگه یک رکورد رو از سرور میگیرن، بعد شروع میکنن به update کردن. اونوقت یه کاربر میره و رکورد رو Save میکنه. موقع ذخیره رکورد، شما تو SQL ای که نوشتید گفتید که فقط در صورتی Update کن، که فیلدهای فعلی در بانک با فیلدهایی که نسخه Original اشون دست کاربر اوله، یکی باشن. چون واسه نفر اول یکی هستش، مشکلی پیش نمیاد.

    اما وقتی نفر دوم داره میره Update کنه، دستور Update نمیتونه رکوردی رو پیدا کنه که با رکورد نسخه Original نفر دوم یکی باشه، چون در حال حاضر نفر اول اونا رو تغییر داده. در نتیجه RecordsAffected مربوط به دستور Update نفر دوم، صفر میشه و شما اون Error رو میگیرید.

    روشی که شما میخواهید برای Concurrency Control، بهش میگن Last In Wins. یعنی هر کی آخرین رکورد رو بنویسه، اون برنده است! تو مثال ما، اطلاعات نفر اول بدون هیج هشداری از بین خواهد رفت. برای این منظور کافی هستش تا شرط Update رو تغییر بدید و دیگه هر رکورد رو با رکورد Original مقایسه نکنید.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •