Avatar billede m_k_l Nybegynder
17. september 2003 - 10:25 Der 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...

vh Morten
Avatar billede ocp Nybegynder
17. september 2003 - 10:29 #1
Man kan gøre forskellige ting - hvad skal der ske når data ændres?
Avatar billede m_k_l Nybegynder
17. september 2003 - 10:31 #2
Ændringerne skal bearbejdes i mit C# windows program, og sendes videre via en OPC client.
Avatar billede ocp Nybegynder
17. september 2003 - 10:37 #3
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).
Avatar billede m_k_l Nybegynder
17. september 2003 - 10:41 #4
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...
Avatar billede ocp Nybegynder
17. september 2003 - 10:58 #5
Noget i denne stil:

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

    sp_oadestroy @object

    close #crs
    deallocate #crs
Avatar billede ocp Nybegynder
17. september 2003 - 10:59 #6
de tre "sp_oa" procedures svarer til createobject osv.
Avatar billede m_k_l Nybegynder
17. september 2003 - 11:14 #7
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 ???
Avatar billede ocp Nybegynder
17. september 2003 - 11:22 #8
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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester