PDA

View Full Version : سوال: اطلاع يافتن از تغيرات در جدول با trigger



reza_edu
شنبه 28 اسفند 1389, 21:29 عصر
سلام دوستان گشتم چيزي كه بدرد بخوره نديدم ميخوام تو برنامه اپليكيشن هر وقت يه ركورد جديد ثبت شد با تريگر ديگر يوزر ها رو با يه تولتيپ از ثبت اطلاعات جديد مطلع كنم من تو اين قسمتش موندم كه از چه روشي استفاده كنم كه برنامه سمت اپليكيشن و وب در حال آماده باش باشن (گوش به زنگ) هروقت ثبت شد كار بر مطلع شه چيزي كه به ذهن خودم رسيد استفاده از يك ترد با اسليپ 500 هست به نظر شما اين كار درست هست چه روشي رو پيش نهاد ميدين؟

Reza_Yarahmadi
شنبه 28 اسفند 1389, 22:35 عصر
اگر قصد دارید از سمت SQL Server این کار رو انجام بدید (یعنی SQL Server این کار رو انجام بده) باید از Notification Services استفاده کنید و نیازی به استفاده از تریگر نیست. (توی چند خط نمیشه این سرویس و طریقه استفاده از اونو توضیح داد).
در صورتی هم که بخواید از سمت برنامه این موضوع رو هندل کنید یا باید یه تایمر بذارید که در محدوده زمانی معین به بانک سر بزنه و تغییرات رو چک کنه و یا اینکه برنامه رو بصورت کلاینت / سروری پیاده سازی کنید و برنامه سرور در صورت تغییر اطلاعات به تمام کلاینتهایی که بهش وصل شدند یک پیغام ارسال کنه.

reza_edu
شنبه 28 اسفند 1389, 23:02 عصر
سلام دوست گرامي من قصد دارم دو حالت رو پياده سازي كنم در حالت اول براي تمام كلاينت ها در حالت دوم براي يك كلاينت خاص .

يعنی SQL Server این کار رو انجام بده بله همين قصد را دارم و فكر كرده بودم با تريگر و sp اين كار رو انجام بدم يعني اول تريگر تشخيص بده و sp رو فرا خوني كنه انوقت باتوجه به حالات گفته شده تصميم گرفته بشه.

در صورتی هم که بخواید از سمت برنامه این موضوع رو هندل کنیدمگه ميشه غير از اين كار ديگري هم كرد بعدا چه جور ميتونه برنامه مطلع بشه؟

Reza_Yarahmadi
یک شنبه 29 اسفند 1389, 09:18 صبح
سلام دوست گرامي من قصد دارم دو حالت رو پياده سازي كنم در حالت اول براي تمام كلاينت ها در حالت دوم براي يك كلاينت خاص .
این موضوع در روش پیاده سازی تاثیری نداره فقط باید 2 بار یک عمل رو انجام بدید.

بله همين قصد را دارم و فكر كرده بودم با تريگر و sp اين كار رو انجام بدم يعني اول تريگر تشخيص بده و sp رو فرا خوني كنه انوقت باتوجه به حالات گفته شده تصميم گرفته بشه.
شما توی یک SP دارید تغییراتی رو روی دیتابیس انجام میدید ، خب همونجا و در آخر SP دستورات لازم برای ارسال پیام رو انجام بدید و بیخودی سربار به سرور تحمیل نکنید. البته درصورتیکه در SPهای زیادی تغییرات انجام بشه و بخواید برای همه عملیات ارسال پیام انجام بشه ، استفاده از تریگر دردسر کمتری داره.
مگه ميشه غير از اين كار ديگري هم كرد بعدا چه جور ميتونه برنامه مطلع بشه؟
Notification Services یکی از سرویس های SQL Server است و میشه از این سرویس برای ارسال پیامها استفاده کرد. ولی شما میتونید 2 برنامه بنویسید ، یکی برنامه سرور و دیگری برنامه کلاینت ، برقراری ارتباط بین 2 برنامه هم با استفاده از سوکت باشه ، برنامه کلاینت روی سیستم های کاربران و برنامه سرور فقط بر روی سرور نصب میشه ، برنامه های کلاینت هیچ وقت بصورت مستقیم با SQL Server ارتباط برقرار نمیکنند و تمام درخواستها رو به برنامه سرور ارسال میکنند. برنامه سرور پس از دریافت درخواستهای کلاینت ، اونها رو روی SQL Server اعمال میکنه و نتیجه رو برای کلاینت ارسال میکنه. این روش چندین مزیت داره: اول اینکه برنامه های کلاینت به SQL Server دسترسی ندارند که این باعث میشه هم امنیت کار بالا بره هم در صورت تغییر سرور ، بانک و ... فقط برنامه سرور نیاز به بروز شدن داشته باشه و کلاینتها درگیر این مسئله نشن. در ضمن بدلیل اینکه برنامه سرور میتونه لیست تمام کاربران آنلاین رو داشته باشه ، در صورت نیاز به ارسال پیام به راحتی برای تمام کلاینتها پیام ارسال میشه.(من خودم در مواقعی هم که نیاز به ارتباط سرور با کلاینتها نیست از این روش استفاده میکنم). در کل این روش انعطاف پذیری برنامه شما رو به مراتب بلاتر میبره.