17. september 2003 - 10:25Der er
7 kommentarer og 1 løsning
Event ved ændring i databasen
Hej,
Er det muligt at modtage et event el. lignende i et windows program (C#), hvis der sker ændringer i en bestemt SQL database ??? Ændringerne forårsages af et andet VB6 windows program og en web applikation.
Alternativet er at genindlæse data hele tiden og så teste for ændringer, men det er ikke videre smart...
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Det første der falder mig ind er at lave en DLL og kalde den fra en stored procedure der igen kaldes via en trigger (der aktiveres når data indsættes/ændres).
Har du mulighed for at komme med en kort kommentar vedr ovenstående ? Har ingen ide om hvordan man kalder en dll fra en stored procedure eller hvordan man bruger triggere.... PS. pointene kan sagtens øges, hvis du ønsker det. Kender ikke helt niveauet...
create trigger on MyTable for insert as declare @felt1 int declare @felt2 varchar(200) declare @felt3 datetime declare @obj int
--Define a cursor for looping thru the inserted records --(The virtual table 'inserted' holds the inserted rows) declare #crs cursor fast_forward for select felt1,felt2,felt3 from inserted
open #crs
sp_oacreate 'mydll.myclass', @object out fetch next from #crs into @felt1,@felt2,@felt3 -- Loop while @@fetch_status = 0 begin sp_oamethod @object, 'UpdateExternal', 'id', @felt1, 'navn', @felt2, 'tidspunkt', @felt3 fetch next from #crs into @felt1,@felt2,@felt3 end
Skal ovenstående skrives i en stored procedure ??? Skal denne så aktiveres før det virker, eller bliver den aktiveret at SQL selv når der sker ændringer?? I ovenstående tilfælde loades dll, vel hver gang der sker ændringer - er det hensigtsmæssigt ???
Nej, dette opretter en trigger på tabellen "MyTable" - denne trigger bliver automatisk aktiveret ved "inserts" i tabellen. Der oprettes en instans af objektet - om dll'en reloades eller ej afhænger af dll'ens opførsel. Det svarer såmænd bare til f.eks. at oprette en "ADODB.Connection" i en funktion.
Jeg glemte lige at give triggeren et navn:
create trigger TR_INS_MyTable on MyTable for insert as declare @felt1 int declare @felt2 varchar(200) declare @felt3 datetime declare @obj int
--Define a cursor for looping thru the inserted records --(The virtual table 'inserted' holds the inserted rows) declare #crs cursor fast_forward for select felt1,felt2,felt3 from inserted
open #crs
sp_oacreate 'mydll.myclass', @object out fetch next from #crs into @felt1,@felt2,@felt3 -- Loop while @@fetch_status = 0 begin sp_oamethod @object, 'UpdateExternal', 'id', @felt1, 'navn', @felt2, 'tidspunkt', @felt3 fetch next from #crs into @felt1,@felt2,@felt3 end
sp_oadestroy @object
close #crs deallocate #crs
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.