نصفه روزه دنبال کار شمام
دوست عزیز من از تجربه شما مطلع نیستم برای همین باید بگم اگه تجربه کافی نداشته باشید مراحل کار شاید براتون یکم سخت باشه!
قبل از ارئه کد ها:
این روش ابتکاری خودمه اگه ایرادی داشت معذرت می خوام و لطف کنید ایرادات احتمالی رو به من هم اطلاع بدید
من این کد رو با SQL 2008 و دات نت 4 نوشتم و بروی سرور 2005 هم تست کردم مشکلی نداشت
بعد سفارشی سازی کد برای شما تست نکردم!
اگه کارکرد کد رو متوجه بشید با کمی تغییر کارهایه مفید و جالب زیادی می تونید با این کد ها انجام بدید
فایل های Dll مورد نیاز :
Microsoft.SqlServer.ConnectionInfo
Microsoft.SqlServer.Management.Sdk.Sfc
Microsoft.SqlServer.Smo
Microsoft.SqlServer.SqlEnum
باضافه موارد عمومی(مثل System.Data و ...)
این Dll ها رو در حالت معمولی می تونید از مسیر زیر پیدا و رفرنس بدید:
C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies
مرحله اول ایجاد Triger رویداد ساز:
کد زیر رو برای یک بار (
فقط یک بار!) بر روی سرور مورد نظر اجرا کنید (یا از طریق برنامه خودتون یا بهتر از اون با SSMS)
USE [master]
GO
ALTER DATABASE [Indicator] SET ENABLE_BROKER WITH NO_WAIT
GO
USE [Indicator]
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[IN_Letter_EventSender]
ON [dbo].[IN_Letter]
FOR INSERT,UPDATE,DELETE AS
BEGIN
BEGIN TRANSACTION
CREATE TABLE [dbo].[IN_Letter_Tmp_For_Event](
[ID] [bit] NULL
) ON [PRIMARY]
DROP TABLE [dbo].[IN_Letter_Tmp_For_Event]
COMMIT
END
GO
این کد برای هر پایگاه داده یک بار باید اجرا شود و یا در جایی از که پایگاه داده جدید رو ایجاد می کنید این کد رو هم در آخر عملیات اجرا کنید
حالا پروژه خودتون رو باز و یک کلاس (یا ماژول) جدید ایجاد و کد های زیر رو داخل اون وارد کنید:(رفرنس ها فراموش نشه!)
Imports Microsoft.SqlServer.Management.Smo
Public Class DatabaseWatcher
Private Shared WatcherServer As Server
Private Shared Sub Table_Changed(ByVal sender As Object, ByVal e As ServerEventArgs)
For Each prpty In e.Properties
If prpty.Value = "IN_Letter_Tmp_For_Event" Then
'Do Here!
MsgBox("اطلاعات جدول تغییر کرد!")
End If
Next
End Sub
Public Shared Sub RegisterEvent()
WatcherServer = New Server("IT-PC")
WatcherServer.ConnectionContext.AutoDisconnectMode = False
Dim db As Database
db = WatcherServer.Databases("Indicator")
Dim databaseCreateEventSet As New DatabaseEventSet
databaseCreateEventSet.DropTable = True
Dim serverCreateEventHandler As ServerEventHandler
serverCreateEventHandler = New ServerEventHandler(AddressOf Table_Changed)
db.Events.SubscribeToEvents(databaseCreateEventSet , serverCreateEventHandler)
db.Events.StartEvents()
End Sub
End Class
برای شروع در یک نقطه از برنامتون(مثلا اوایل اجرا) RegisterEvent رو از کلاس بالا صدا بزنید
کاری رو که می خواید انجام بدبد (مثلا رفرش ) رو با پیغام جایگذاری کنید
امید وارم مفید واقع بشه