myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Datentechnologien » [SOLVED] SQLDependency OnChange feuert nur zwei mal
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

[SOLVED] SQLDependency OnChange feuert nur zwei mal

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
RayYago RayYago ist männlich
myCSharp.de-Mitglied

Dabei seit: 22.07.2019
Beiträge: 12


RayYago ist offline

[SOLVED] SQLDependency OnChange feuert nur zwei mal

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

verwendetes Datenbanksystem: SQL Server

Hallo ich spiele gerade mit SQL Dependency herum und habe das Beispiel von MS dazu verwendet:

 MS SQLDependency

An sich funktioniert das, aber ich probiere gerade ein wenig aus und wenn ich viele Inserts in kurzer Zeit mache, werden nur max. zwei davon registriert.

*EDIT* Wenn ich das Console.Writeline mit dem neu abbonieren tausche, werden bis zu 20 Einträge registriert. Ist das abbonieren vielleicht zu langsam?**

Das kann doch kein erwünschtes Verhalten sein oder? Ich führe folgendes SQL 180 hintereinander aus:

Code:
1:
insert into t3_auftr_log_ll (lade_nr, vg_lfd_nr, status) values(1,2,3)

und habe das Beispiel so bearbeitet das noch eine Connection zur Datenbank geöffnet wird und jedes mal beim Event der Event Handler neu abonniert wird:

C#-Code:
class Program
  {



    private string sampleConnectionString = "Server=DESKTOP-N943R2B\\SQLEXPRESS01;Database = DBDependency; User Id = sa;Password = admin; ";

    SqlConnection conn;

    public static void Main(string[] args)
    {
         var program = new Program();
        program.Initialization();

        Console.ReadLine();
    }

        void Initialization()
        {
            // Create a dependency connection.
            conn = new SqlConnection(sampleConnectionString);
            RegisterDependencyUsingSpecificQueue();
        }

        private void RegisterDependencyUsingSpecificQueue()
        {
            if (conn.State == ConnectionState.Closed)
            {
                conn.Open();
            }

            SqlDependency.Start(sampleConnectionString);

            using (SqlCommand command = new SqlCommand("SELECT [id],[lade_nr],[vg_lfd_nr],[status] FROM[dbo].[t3_auftr_log_ll]", conn))
        {

            // Create a dependency and associate it with the SqlCommand.
            SqlDependency dependency = new SqlDependency(command);
            // Maintain the reference in a class member.

            // Subscribe to the SqlDependency event.
            dependency.OnChange += new OnChangeEventHandler(OnDependencyChange);

            // Execute the command.
            using (SqlDataReader reader = command.ExecuteReader())
            {
                // Process the DataReader.
            }
        }

    }

    // Handler method
    void OnDependencyChange(object sender, SqlNotificationEventArgs e)
    {
        Console.WriteLine("Got Here!");
            // Handle the event (for example, invalidate this cache entry).
            RegisterDependencyUsingSpecificQueue();
    }

    void Termination()
    {
        // Release the dependency.
        SqlDependency.Stop(sampleConnectionString, "SQLDependencyQueue");
    }
}

Ohne das neu abbonieren geht es nur einmal. Ich kann mir nicht erklären wieso das gerade so ist. Hat da jemand vielleicht eine Idee?

Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von RayYago am 09.11.2019 19:28.

09.11.2019 16:53 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
RayYago RayYago ist männlich
myCSharp.de-Mitglied

Dabei seit: 22.07.2019
Beiträge: 12

Themenstarter Thema begonnen von RayYago

RayYago ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Habs herausgefunden, die SQLDependency registriert keine weiteren Notifications solange der Handler noch am arbeiten ist. Das ganze ist für so eine Anzahl an Daten schon bereits nicht gut verwendbar wenn man alle Datensätze haben will.

Was anstatt dessen aber geht ist SqlNotificationRequest

Beispiel hier:  SQLNotificationRequest

Persönlich getestet und funktioniert gut auch mit über 100 Inserts in der Sekunde.
09.11.2019 18:51 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 15.11.2019 03:31