PDA

View Full Version : همزمانی ثبت اطلاعات در محیط شبکه



zohre66
چهارشنبه 15 مرداد 1393, 07:09 صبح
با سلام و احترام
در پروژه ای که دارم قرار هست در محیط شبکه (بین سیستم های سرور و کلاینت ) پیاده سازی بشه.
سوال که برام پش اومده اینکه اولا هنگام ثبت اطلاعات در برنامه چک می کنیم که برای ای دی انتخابی اگر رکوردی تو دیتابیس وجود داره عملیات ویرایش و در غیر اینصورت عملیات insert رخ بده. حالا مشکلی پیش میاد موقعی هست که کاربر1 من شناسه 2 را انتخاب کرده تا برای ان عملیات insert انجام بده و در این هنگام کاربر2 من اینکار رو سریعتر انجام میده و هنگامی که کاربر1 روی دکمه ثبت کلیک می کنه دیگه عملیات insert رو نداره و رکورد واردی ویرایش می شه. چه جوری جلوی این عملیات رو بگیرم و یا اینکه اون رکورد را قفل کنم
لطفا راهنمایی کنید

Davidd
چهارشنبه 15 مرداد 1393, 08:04 صبح
سلام
اگه درست فهميده باشم وقتي يه ركورد جديد ميخاد اضافه بشه يه شناسه توليد ميكنين بنابراين اگه چند كاربر همزمان بخوان ركورد اضافه كنن براي همه يه شناسه توليد ميشه. راه حل قفل كردن جواب نميده چون معلوم نيست كاربر كي دكمه ثبت بزنه. راه حل ساده اينه كه شناسه از نوع identity باشه كه خود ديتابيس اتوماتيك انتخاب كنه. راه حل ديگه اينه كه موقعي كه دكمه ثبت زده شد شناسه توليد بشه.

zohre66
چهارشنبه 15 مرداد 1393, 08:32 صبح
مشکل اینجاست که دکمه ثبت و ویرایش یکی هست وقتی روی دکمه ثبت کلیک میشه شناسه ام رو بررسی می کنه اگر در دیتابیس وجود داره عملیات ویرایش و در غیر اینصورت ثبت میشه . متوجه منظورم می شوید!!

Davidd
چهارشنبه 15 مرداد 1393, 08:47 صبح
مشکل اینجاست که دکمه ثبت و ویرایش یکی هست وقتی روی دکمه ثبت کلیک میشه شناسه ام رو بررسی می کنه اگر در دیتابیس وجود داره عملیات ویرایش و در غیر اینصورت ثبت میشه . متوجه منظورم می شوید!!
آره متوجه شدم و جوابشم گفتم!! شما نبايد اجازه بدي كه كاربر شناسه وارد كنه و يا ويرايش كنه. اگه ركوردي كه ميخاد ثبت بشه شناسه داشت يعني قراره ويرايش بشه و اگه شناسه نداشت يعني ركورده جديده.

omid nasri
چهارشنبه 15 مرداد 1393, 08:48 صبح
شما اگه از WPF استفاده می کردی بهتر بود؟ می تونستی روی دکمه Context Menu قرار می دادی که وقتی روش کلیک می شود منو نمایش داده بشه. و بعد انتخاب؛

zohre66
چهارشنبه 15 مرداد 1393, 09:25 صبح
آره متوجه شدم و جوابشم گفتم!! شما نبايد اجازه بدي كه كاربر شناسه وارد كنه و يا ويرايش كنه. اگه ركوردي كه ميخاد ثبت بشه شناسه داشت يعني قراره ويرايش بشه و اگه شناسه نداشت يعني ركورده جديده.

از پاسختون خیلی ممنون
اما حالتی پیش میاد که دو تا کاربر همزمان در حال ویرایش هستند اون موقع چی ؟؟؟

Davidd
چهارشنبه 15 مرداد 1393, 10:03 صبح
از پاسختون خیلی ممنون اما حالتی پیش میاد که دو تا کاربر همزمان در حال ویرایش هستند اون موقع چی ؟؟؟ خواهش ميكنم. خب در حال ويرايش باشن چه مشكلي پيش مياد؟ آخرش دكمه ثبت ميزنن (به هر حال يك كاربر زودتر ثبت انجام ميده) و اگه هر دو كاربر يه ركورد ويرايش كنن، كاربري كه ديرتر ثبت انجام بده داده برنده ميشه.

NasimBamdad
چهارشنبه 15 مرداد 1393, 10:46 صبح
برای عملیات های Insert , Update , Delete , .و... از Stored Procedure استفاده کنید .

این طوری عملیات صف بندی رو خود SQL انجام میده و از Identity برای شناسه ها استفاده کنید