Avatar billede Tampico Praktikant
28. november 2008 - 09:39 Der er 9 kommentarer og
1 løsning

Trigger, der aktiverer et event i min applikation

Hej Eksperter

Jeg har en VB.NET-applikation der overvågner nogle brugere. Hver gang de udfører nogle bestemte operationer og dermed opdaterer i en bestemt tabel i databasen, vil jeg gerne have et event i min overvågnings-applikation, så jeg kan lave en opdatering af mit skærmbillede.

Jeg har læst lidt om triggers på databasen, men aldrig brug det før, og ved ikke om det løser dette problem?
Så hvis det kan, vil jeg gerne vide hvordan - og helst skåret lidt ud i pap :-)

Pft.
Avatar billede isl19960 Nybegynder
28. november 2008 - 11:08 #1
Hej tampico,

Her er et godt link... som godt nok er gammelt og omtaler version 7/2000 af SQL-server - men det grundlæggende har ikke ændret sig, og gennemgangen og forklaringerne er ret gode.

http://www.devarticles.com/c/a/SQL-Server/Using-Triggers-In-MS-SQL-Server/

Som du forklarer det her, er triggers helt sikkert noget du kan bruge.

Håber det hjælper dig videre...
Avatar billede Tampico Praktikant
28. november 2008 - 11:54 #2
Ganske godt link :-)
Men jeg synes jeg mangler en beskrivelse eller et eksempel på hvordan koden i applikationen ser ud, og som må stå og lytte på triggeren i databasen - eller???
Avatar billede isl19960 Nybegynder
28. november 2008 - 12:23 #3
Hej igen,

Nu kender jeg ikke så meget til programering i VB.NET (eller i det hele taget).

... men ideen kunne måske været at du på sql-serveren lavede en trigger der skrev en linie i en tabel - f.eks. hvis en bruger ændrede eller slette noget i en tabel.
Her kan du så faktisk få skrevet før og nu værdier.

Måske du så kan få din applikation til at kigge efter nye poster i denne tabel ?

Den kode der afvikles i forbindelse med en trigger er der vist ikke så mange begrænsninger på - er man programmør kan man vist det hele :-)

Men måske du skal ha' fat i een af programmeringskategorierne hvis du vil ha' fat i nogen som kan give nogle hints på den front - nu ved du ihvertfald hvad triggers kan bruges til i SQL-serveren...
Avatar billede Tampico Praktikant
28. november 2008 - 12:37 #4
Hej isl19960

Tak for input, men det var ikke lige det jeg søgte. Ideen var jo at når der skete noget på serveren i en bestemt tabel, som jeg i min applikation skulle tage action på, så ville jeg have serveren til at "pushe" beskeden ud til applikationen, så det ikke var applikationen der skulle stå og spøge serveren hvert 5. sekundt.

Hvis jeg skal overføre data via en trigger til en anden tabel på serveren, så er jeg jo lige vidt...
Avatar billede arne_v Ekspert
28. november 2008 - 17:41 #5
Avatar billede Tampico Praktikant
01. december 2008 - 14:49 #6
Jeg tror du har fat i noget af det rigtige arne_v - men jeg kan bare ikke få det til at fungere ordenligt.
Den kaster godt nok et event når jeg kører sql-sætningen hvori eventet også bliver defineret, men ellers sker der ikke meget når jeg ændrer i tabellen fra andre programmer eller funktioner.
Så noget må jeg gøre forkert - kan bare ikke funde ud af hvad :-(

Synes ellers det må være en funktion der kunne være nyttig i rigtigt mange sammenhænge, specielt når man skal monitorere eller overvåge...
Avatar billede arne_v Ekspert
02. december 2008 - 02:42 #7
Må vi se den kode du bruger ?
Avatar billede Tampico Praktikant
03. december 2008 - 11:19 #8
Min kode jeg burger ser således ud:

Private Sub Button_add_previlegius_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_add_previlegius.Click
Dim DbConnetionString As String = "server=grasrsql01;Integrated Security=SSPI;database=Test"
    Dim con As SqlConnection = New SqlConnection(DbConnetionString)
    Dim cmd As SqlCommand
    Dim rdr As SqlDataReader       
con.Open()
        cmd = New SqlCommand("SELECT User_id FROM Users", con)


        Dim dependency As New SqlDependency(cmd)
        AddHandler dependency.OnChange, AddressOf OnDependencyChange

        cmd.ExecuteReader()
        'While rdr.Read


        'End While
        con.Close()
    End Sub

Private Sub OnDependencyChange(ByVal sender As Object, ByVal e As SqlNotificationEventArgs)
        MessageBox.Show("Notify - change in database !!!")
    End Sub

Somsagt aktiverer den et event når jeg kører sql-sætningen, men ikke når jeg kører andre updates eller insert i tabellen i andre metoder eller applikationer :-(
Avatar billede Tampico Praktikant
03. december 2008 - 11:29 #9
Hov, glemte lige at jeg jo selvfølgelig også starter min dependency her:

Sub Initialization()
        SqlDependency.Start("server=grasrsql01;Integrated Security=SSPI;database=Test")

    End Sub
Avatar billede Tampico Praktikant
24. oktober 2010 - 10:32 #10
Lukker
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

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