PDA

View Full Version : به روز رسانی دیتاگرید در برنامه تحت شبکه هنگام تغییرات توسط یک کاربر برای بقیه کاربران



raha_20
جمعه 21 مهر 1391, 16:16 عصر
سلام دوستان
من یه برنامه دارم که تحت شبکه کار میکنه . میخوام وقتی یک رکورد را یه نفر ثبت ویرایش یا حذف میکنه کل برنامه به روز شود . یعنی اگه یه نفر یک فرم را باز کرده که اطلاعات تو دیتا گرید داره بهش نشون داده میشه اگه یه نفر دیگه یه رکورد را حذف کرد فورا گرید بقیه رفرش بشه !


اگه کسی راهنمایی کنه مممنون میشم

مسعود اقدسی فام
جمعه 21 مهر 1391, 16:58 عصر
اینطور برنامه‌ای رو به اصلاح برنامه‌ی آنلاین هم می‌گن. در سطح برنامه‌نویسی کاربر چاره‌ای ندارید جز اینکه تمام سیستم‌ها چند لحظه یه بار اطلاعات رو وارسی کنه.

واسه وارسی کردن روش زیاده. یکی اینکه کل دیتابیس و اون جدول رو در واقع دوباره واکشی کنه. یعنی چند ثانیه یه بار یه لود مجددا. این روش عملا مقرون به صرف نیست. چون سربار زیادی به شبکه وارد می‌کنه که هیچ، برنامه‌ی کاربر هم سنگین کار می‌کنه. یا اینکه فقط تغییرات یه جای سرور با تاریخ و زمان دقیق ثبت بشه. همه‌ی سیستم‌های دیگه اونجا سر بزنن و اگه تغییری مربوط به جدول پیش روی کاربر بود اعمال کنن.
و ...
و ...
و ...

AmirGhasemi
جمعه 21 مهر 1391, 17:05 عصر
مسعود جان اقدسي فام عزيز سلام!
اين و ... و ... و ... را هم توضيح بده ديگه دادا!
در ضمن قطعه كد بذار ما هم بي نصيب نباشيم

مسعود اقدسی فام
جمعه 21 مهر 1391, 17:34 عصر
مسعود جان اقدسي فام عزيز سلام!
اين و ... و ... و ... را هم توضيح بده ديگه دادا!
در ضمن قطعه كد بذار ما هم بي نصيب نباشيم

والا این و ... و ... و ... دقیقا خودمم نمی‌دونم دقیقا چی می‌تونه باشه. ولی چیزی شبیه روش دومی که گفتم هستن. باید دقیق فکر کرد. در کل چاره‌ای غیر از سرکشی مقطعی نیست دیگه. هست؟

AmirGhasemi
جمعه 21 مهر 1391, 17:41 عصر
آقا من يه روشي توي ذهنم هست اصلا نمي دونم روش درستي هست يا نه و اصلا نمي دونم چگونه بايد در سي شارپ پياده اش كرد!
روش ذهني من اينه:
به محض اينكه هر ديتايي وارد ديتابيس شد چيزي شبيه به يك eventرخ دهد از طرفي سمت كلاينت ها هم يك listener باشد كه به محض روي دادن اين event يك متدي را مثلا رفرش كردن گريدها را انجام دهد
اما من نمي دانم اين event سمت ديتابيس و اين listener سمت سي شارپ را چگونه بايد پياده كرد؟

مسعود اقدسی فام
جمعه 21 مهر 1391, 18:11 عصر
آقا من يه روشي توي ذهنم هست اصلا نمي دونم روش درستي هست يا نه و اصلا نمي دونم چگونه بايد در سي شارپ پياده اش كرد!
روش ذهني من اينه:
به محض اينكه هر ديتايي وارد ديتابيس شد چيزي شبيه به يك eventرخ دهد از طرفي سمت كلاينت ها هم يك listener باشد كه به محض روي دادن اين event يك متدي را مثلا رفرش كردن گريدها را انجام دهد
اما من نمي دانم اين event سمت ديتابيس و اين listener سمت سي شارپ را چگونه بايد پياده كرد؟

اون Event توی فرم‌ها باشه یا داخل دیتابیس؟ روی فرم‌ها باشه که به ازای هر فرم و هر تراکنش باید اون تابع یا ایونت با پارامترهای تغییر فراخوانی بشه. اگه دیتابیسی باشه که یه چیزی شبیه تریگر می‌شه.

یه کاری هم که می‌شه کرد خیلی شبیه روش دوم همینه. یعنی با یا تریگر یا رویداد یه جدول تغییرات رو آپ کنی. اما ... ما این ایونت رو چطور به کلاینت برسونیم؟ یا باید سوکت پروگرمینگ انجام بدیم و به قول شما کلاینت گوش بده همش. یا خود کلاینتها چند وقت به چند وقت بررسی کنن. اگه برنامه‌نویسی شبکه باشه که خب شاید اصلا نیاز نباشه تغییرات رو دیتابیس هم معلوم شه. با همون شبکه ارسال می‌شه می‌ره. اما این کارا واقعا چقدر مقرون به صرفه هستن؟

raha_20
جمعه 21 مهر 1391, 18:24 عصر
میگن یه سرویسی هست که وقتی یه چیزی به دیتا بیس اضافه میشه خود sql یه چیزی به برنامه می فرسته که
دقیق نمی دونم چی هست . اگه اینجوری باشه خوبه

Mahmoud Zaad
جمعه 21 مهر 1391, 18:37 عصر
سلام
SqlDependency (http://www.codeproject.com/Articles/12335/Using-SqlDependency-for-data-change-events)این کارو میکنه.