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

نام تاپیک: مشکل همزمانی در ویراش و حذف رکوردها

  1. #1

    مشکل همزمانی در ویراش و حذف رکوردها

    سلام

    دو کلاینت در نظر بگیرید A , B

    هر دو برنامه رو اجرا میکنند و یک دیتاگرید که به DataSet بایند شده و توسط TableDataAdapter پر شده رو نمایش میدهند

    کلاینت A رکورد سوم دیتاگرید رو ویرایش میکنه در همون حال رکورد کلاینت B میخواد اون رو پاک کنه آیا با توجه به اینکه SQlExpress با CRL کار میکنه راهی هست از طریق دات نت این عملیات کنترل بشه یا خود SQLExpress بتونه این کار رو انجام بده ؟

    توجه داشته باشیم که در دات نت ویرایش داده ها غالبا در حالت Disconnected و درون DataSet اتفاق میوفته و یجوری ما باید بدونیم که در دیتا ست فلان کلاینت فلان رکورد داره ویرایش میده و همون در دیتا بیس تا پایان ویرایش قفل بشه

    امیدوارم متوجه منظور شده باشید

    منتظر راهنمائی و نظرات شما هستم

  2. #2
    اگر شما بخواهید رکوردی را که در دیتاست در حال ویرایش است قفل کنید یک فاجعه در همزمانی کاربران رخ میده. آخه تا کی رکورد قفل بشه؟ بعشدم وقتی که رکورد قفل بشه دیگه سلکت هم نمیشه زد.
    یک راه هست که وقتی که میخاید رکورد رو آپدیت کنی ببینی قبلا" بلایی سرش اومده یا نه. که اگر بخای اینکارو بکنی باید از timeStamp استفاده کنی.

  3. #3
    راه حل اصولیشو نمیدونم ولی اگه من بودم یک فیلد به جدولم اضافه می کردم به اسم Lock. وقتی می خواستم ویرایشش کنم اونو یک می کردم و وقتی کارم تموم شد صفر می کردم
    تو دستور حذف هم چکش می کردم که اون فیلد یک نباشه

  4. #4
    دوست اولی منظور منو متوجه نشد

    جناب پویا این کار ابتدائی به ذهنم اومده ولی راه حل منطقی نیست . باید راه حل اصولی وجود داشته باشه

  5. #5
    نقل قول نوشته شده توسط sh مشاهده تاپیک
    دوست اولی منظور منو متوجه نشد
    شما خودتون اشاره کردید که دارید در حالت Disconected کار میکنید.
    اینکارشما شبیه اینه که به دو نفر دوتا لیست بدند و بگویدند هرتغییراتی که دلتون مخیواد بدید. و بعد بیارید اینجا ثبتش کنید. حالا که لیست ها رو بردند خونه ما از کجا بدونیم که چه تغییراتی داره انجام میشه؟

  6. #6
    راجب Optimistic Concurrency تحقیق کن

  7. #7
    این موضوع چه ربطی داره به سوال شما؟ مگر شما همزمانی رو توی خود SQL Server مورد سوال قرار دادی؟

  8. #8
    من دنبال جلوگیری از این کار هستم چه از طریق دیتا ست چه توی خود دیتابیس

  9. #9
    نقل قول نوشته شده توسط sh مشاهده تاپیک
    من دنبال جلوگیری از این کار هستم چه از طریق دیتا ست چه توی خود دیتابیس
    من هرجوری فکر میکنم می بینم اینی که شما گویی نوشه.

  10. #10
    امیدوارم منظورتون رو درست متوجه شده باشم
    می تونید یک فیلد RowVersion به جدولتون اضافه کنید موقع Fetch این فیلد رو هم بگیرید و موقع Update و Delete به این شکل عمل کنید:
     
    Update TableName
    SET F1 = Value1, F2 = Value2, RowVersion = RowVersion + 1
    WHERE Condition
    And RowVersion = @RowVersion -- مفدار گرفته شده به هنگام واکشی رکورد
    If @@RowCount <>1 Print 'رکورد تغییر یافته'

    DELETE From TableName
    WHERE Condition
    And RowVersion = @RowVersion -- مفدار گرفته شده به هنگام واکشی رکورد

    If @@RowCount <>1 Print 'رکورد تغییر یافته'

    روشنه که اگه مغایرتی بین رکورد مورد نظر به هنگام Fetch و Update یا Delete وجود داشته باشه امکان Update یا Delete اون وجود نخواهد داشت.

  11. #11
    کاربر دائمی آواتار SMRAH1
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    مشهد
    پست
    884
    سلام

    اگر دقت کرده باشید دربیشتر برنامه ها ،مود نمایش داده ها با وضعیت حذف یا ویرایش متفاوت است (یعنی باید گزینه ای رو فعال یا غیر فعال کنی یا اصلا بری توی یک دیالوگ دیگه).در واقع زمانی که شما در خواست تغییر در دیتابیس رو دارین،پایگاه داده باید آماده بشه.این آمادگی توسط نوع بازشدن دیتابیس (connection string) است که مشخص میکنه آیا یک snapshot باشه یا ...

    من با دات نت خیلی آشنا نیستم ولی فکر کنم برای این مواقع یاید حتما حالت اتصال به پایگاه داده عوض بشه (البته به صورت موقت) تا دیگر کاربر ها نتوانن در داده ها تغییر ایجاد کنند.

    موفق باشید

  12. #12
    مگر خود sql server ابزار کافی و قوی برای کنترل همزامانی کاربران ندارد که ما بیاینم توسط کلاینت این ابزار رو ایجاد کنیم

  13. #13
    VIP آواتار رضا عربلو
    تاریخ عضویت
    اردیبهشت 1403
    محل زندگی
    تهران
    پست
    1,597
    با توجه به سناریوی کهگفتید تنها راهی که به نظرم می رسد یک فیلد قفل با یک فیلد Lock Timeout است.
    در صورتی که این تایم اوت برسد قفل برداشته شود
    اگر Net. نمی دانید وارد نشوید.

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

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