Avatar billede steensommer Praktikant
08. oktober 2012 - 21:49 Der er 12 kommentarer

SQLDependency

Hej

Jeg har lavet en Booking kalender i VB .Net. For at kalenderen er opdateret kører der en Timer der indlæser data fra SQL databasen. Det fungerer i princippet godt nok men er langsomt OG man kan tydelig se opdateringen med sekunders interval.
Jeg søger i stedet en løsning der kan detektere ændringer i databasen: BookingSamlet og faldt over denne men jeg er ikke på det rene med hvordan den skal implementeres:

Sub Initialization()
    ' Create a dependency connection.
    SqlDependency.Start(connectionString, queueName)
End Sub

Sub SomeMethod()
    ' Assume connection is an open SqlConnection.
    ' Create a new SqlCommand object.
    Using command As New SqlCommand( _
      "SELECT ShipperID, CompanyName, Phone FROM dbo.Shippers", _
      connection)
   
        ' Create a dependency and associate it with the SqlCommand.
        Dim dependency As New SqlDependency(command)
        ' Maintain the refence in a class member.
        ' Subscribe to the SqlDependency event.
        AddHandler dependency.OnChange, AddressOf OnDependencyChange
   
        ' Execute the command.
        Using reader = command.ExecuteReader()
            ' Process the DataReader.
        End Using
    End Using
End Sub

' Handler method
Sub OnDependencyChange(ByVal sender As Object, _
    ByVal e As SqlNotificationEventArgs)
    ' Handle the event (for example, invalidate this cache entry).
End Sub

Sub Termination()
    ' Release the dependency
    SqlDependency.Stop(connectionString, queueName)
End Sub
Avatar billede arne_v Ekspert
08. oktober 2012 - 21:55 #1
Hvis du kan se opdateringen, saa tror jeg at det er kodet forkert.

Men den kode snippet er ret simpel.

Den beder om at faa koert metoden OnDependencyChange, hvis en anden bruger opdaterer data i den SELECT.
Avatar billede steensommer Praktikant
08. oktober 2012 - 22:04 #2
Jeg har nok ikke forstået det helt korrekt. Er det først hvis koden i:
Sub SomeMethod()
anvendes at OnDependencyChange kører?
Avatar billede arne_v Ekspert
08. oktober 2012 - 22:08 #3
Det er SomeMethod som saetter trigger mekanismen op.
Avatar billede steensommer Praktikant
08. oktober 2012 - 22:15 #4
Men hvad hvis jeg ønsker at detektere alle ænndinger i DB?
Avatar billede arne_v Ekspert
08. oktober 2012 - 22:23 #5
SqlDependency kan kun notifye omkring aendringer i en eller flere specifikke SELECT output.
Avatar billede steensommer Praktikant
08. oktober 2012 - 22:25 #6
SÅ hvis man kører select når Kalenderen opstartes så gives der besked ved ændringer i de select der er valgt?
Avatar billede arne_v Ekspert
08. oktober 2012 - 22:34 #7
En SqlDependency trigger hvis det man har bedt den overvaage aendrer sig. Man behoever ikke hente data.

Laes docs:
  http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldependency.aspx
Avatar billede steensommer Praktikant
08. oktober 2012 - 22:44 #8
Hvordan kan det fungere i praksis:
Når formen med data(kalender) åbner køres:

Sub Initialization()
    ' Create a dependency connection.
    SqlDependency.Start(connectionString, queueName)
End Sub


Når formen lukker køres:

Sub Termination()
    ' Release the dependency
    SqlDependency.Stop(connectionString, queueName)
End Sub

Nu kniber det så for mig hvor: SomeMethod Skal placeres?
Avatar billede arne_v Ekspert
09. oktober 2012 - 00:09 #9
Mellem disse.
Avatar billede steensommer Praktikant
09. oktober 2012 - 06:54 #10
Det efterlader sådan ca et par tusinde muligheder :-D
Avatar billede arne_v Ekspert
09. oktober 2012 - 14:49 #11
Ja.

Du har et stykke kode som giver en vis funktionalitet (mere praecist at du faar kaldt en metode naar noget data aendrer sig).

Du skal naturligvis kalde den kode hvor du har brug for den funktionalitet.

Og der er formentligt ikke andre end dig som ved hvor du har brug for den funktionalitet.
Avatar billede steensommer Praktikant
10. oktober 2012 - 00:18 #12
Jeg opgav at anvende SQLDependency og lavede i stedet en Checksum (Hash Field) hvilket faktisk fungerer rigtigt godt.
Tak for din hjælp selvom jeg er lidt tung i forståelsen :-)
Vh Steen
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