همزمانی ثبت اطلاعات در محیط شبکه
با سلام و احترام
در پروژه ای که دارم قرار هست در محیط شبکه (بین سیستم های سرور و کلاینت ) پیاده سازی بشه.
سوال که برام پش اومده اینکه اولا هنگام ثبت اطلاعات در برنامه چک می کنیم که برای ای دی انتخابی اگر رکوردی تو دیتابیس وجود داره عملیات ویرایش و در غیر اینصورت عملیات insert رخ بده. حالا مشکلی پیش میاد موقعی هست که کاربر1 من شناسه 2 را انتخاب کرده تا برای ان عملیات insert انجام بده و در این هنگام کاربر2 من اینکار رو سریعتر انجام میده و هنگامی که کاربر1 روی دکمه ثبت کلیک می کنه دیگه عملیات insert رو نداره و رکورد واردی ویرایش می شه. چه جوری جلوی این عملیات رو بگیرم و یا اینکه اون رکورد را قفل کنم
لطفا راهنمایی کنید
نقل قول: همزمانی ثبت اطلاعات در محیط شبکه
سلام
اگه درست فهميده باشم وقتي يه ركورد جديد ميخاد اضافه بشه يه شناسه توليد ميكنين بنابراين اگه چند كاربر همزمان بخوان ركورد اضافه كنن براي همه يه شناسه توليد ميشه. راه حل قفل كردن جواب نميده چون معلوم نيست كاربر كي دكمه ثبت بزنه. راه حل ساده اينه كه شناسه از نوع identity باشه كه خود ديتابيس اتوماتيك انتخاب كنه. راه حل ديگه اينه كه موقعي كه دكمه ثبت زده شد شناسه توليد بشه.
نقل قول: همزمانی ثبت اطلاعات در محیط شبکه
مشکل اینجاست که دکمه ثبت و ویرایش یکی هست وقتی روی دکمه ثبت کلیک میشه شناسه ام رو بررسی می کنه اگر در دیتابیس وجود داره عملیات ویرایش و در غیر اینصورت ثبت میشه . متوجه منظورم می شوید!!
نقل قول: همزمانی ثبت اطلاعات در محیط شبکه
نقل قول:
نوشته شده توسط
zohre66
مشکل اینجاست که دکمه ثبت و ویرایش یکی هست وقتی روی دکمه ثبت کلیک میشه شناسه ام رو بررسی می کنه اگر در دیتابیس وجود داره عملیات ویرایش و در غیر اینصورت ثبت میشه . متوجه منظورم می شوید!!
آره متوجه شدم و جوابشم گفتم!! شما نبايد اجازه بدي كه كاربر شناسه وارد كنه و يا ويرايش كنه. اگه ركوردي كه ميخاد ثبت بشه شناسه داشت يعني قراره ويرايش بشه و اگه شناسه نداشت يعني ركورده جديده.
نقل قول: همزمانی ثبت اطلاعات در محیط شبکه
شما اگه از WPF استفاده می کردی بهتر بود؟ می تونستی روی دکمه Context Menu قرار می دادی که وقتی روش کلیک می شود منو نمایش داده بشه. و بعد انتخاب؛
نقل قول: همزمانی ثبت اطلاعات در محیط شبکه
نقل قول:
نوشته شده توسط
deldadeh108
آره متوجه شدم و جوابشم گفتم!! شما نبايد اجازه بدي كه كاربر شناسه وارد كنه و يا ويرايش كنه. اگه ركوردي كه ميخاد ثبت بشه شناسه داشت يعني قراره ويرايش بشه و اگه شناسه نداشت يعني ركورده جديده.
از پاسختون خیلی ممنون
اما حالتی پیش میاد که دو تا کاربر همزمان در حال ویرایش هستند اون موقع چی ؟؟؟
نقل قول: همزمانی ثبت اطلاعات در محیط شبکه
نقل قول:
نوشته شده توسط
zohre66
از پاسختون خیلی ممنون اما حالتی پیش میاد که دو تا کاربر همزمان در حال ویرایش هستند اون موقع چی ؟؟؟
خواهش ميكنم. خب در حال ويرايش باشن چه مشكلي پيش مياد؟ آخرش دكمه ثبت ميزنن (به هر حال يك كاربر زودتر ثبت انجام ميده) و اگه هر دو كاربر يه ركورد ويرايش كنن، كاربري كه ديرتر ثبت انجام بده داده برنده ميشه.
نقل قول: همزمانی ثبت اطلاعات در محیط شبکه
برای عملیات های Insert , Update , Delete , .و... از Stored Procedure استفاده کنید .
این طوری عملیات صف بندی رو خود SQL انجام میده و از Identity برای شناسه ها استفاده کنید