Connection zur Datenbank regelmäßig anstoßen - Timer?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von DrZwockel.

    Connection zur Datenbank regelmäßig anstoßen - Timer?

    Hallo VB-Gemeinde,

    ich habe mal eine Frage zur Herangehensweise an mein Problem.

    Ich habe eine Anwendung, die mit einer Oracle Datenbank in Verbindung steht und von dort Daten lädt, die sie zum einen für die Darstellung (UI) und zum anderen für die Datenauswertung benötigt. Dies funktioniert auch alles einwandfrei.
    Das Problem ist ein anderes. Ist das Programm geladen und es wird eine zeitlang darin nichts gemacht, so schließt die DB die Connection und wenn dann eine Form gestartet wird, fehlen erst einmal die Informationen zur Darstellung. Erst das zweite Öffnen der Form bzw. der ComboBox oder des DataGrids (beispielhaft) ziegen alles korrekt an.

    Meine Idee war, in einem Zeitintervall von X Minuten eine Connection zur DB aufzubauen und zwar immer dann, wenn die letzte Anfrage an die DB den Wert X überschreitet. Somit soll jedes Mal nach Absetzen einer Anfrage an die DB neu gezählt werden (Timer?).

    Mit fehlt hier der Ansatz, wie man einen Timer "projektweit" initialisiert und diesen dann aus den einzelnen Modulen/Funktionen "resetet".

    Vielleicht gubt es auch einen besseren Ansatz, als den von mir geschilderten. Vielen Dank für Eure Mithilfe.


    Gruß vom Doc
    Hallo EaranMaleasi,

    vielen Dank für Deine Antwort. Leider habe ich da keinen Einfluss drauf, wie lange die Zeit für die ConnectionTimeout eingestellt ist. Das Problem besteht immer dann, wenn die Form bereits geöffnet wurde, dann länger nichts passiert ist und dann wieder eine Aktion erfolgen soll. Die erste Aktion läuft ins leere. Die nächste läuft einwandfrei.


    Gruß vom Doc
    Ich stimme @EaranMaleasi und @ErfinderDesRades zu. Die Verbindung sollte nur offen sein, wenn sie benötigt wird. Du hast in deinem Projekt einfach nen Fehler drin und versuchst nun diesen mit einem schlechten Workaround zu beheben anstatt direkt an der Quelle des übels zu arbeiten.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Hallo,

    ich kann Eure Einwände nachvollziehen. Das Problem scheint aber anders gelagert zu sein .. glaube ich ?( .

    Das Fenster ist bereits geöffnet und die entsprechenden Informationen geladen. Wird dann aber eine längere Zeit nichts gemacht und dann zum Beispiel eine Combobox aufgeklappt, ein Eintrag ausgewählt und hierdurch eine Aktion angestoßen, so läuft diese erst einmal ins Leere, da die Connection zu ist. Beim zweiten Klick ist alles wieder OK.

    Es geht um die Zeit, in der der User "Nichts macht".


    Gruß vom Doc
    Also, dann ohne Samthandschuhe (nicht böse gemeint): Der Fehler liegt bei dir. Du hast unsauber programmiert und einen Logik- und Designfehler in dein Programm eingebaut. Wahrscheinlich hast du sogar den DB Zugriff in der GUI drin stehen, statt diesen in eine separate Klasse auszulagern.

    Die Verbindung zur DB wird zum Laden und Speichern benötigt. Hierzu wird die Verbindung geöffnet und, wenn fertig, wieder geschlossen. Fertig.

    3 erfahrene User haben dir das gleiche geschrieben. Warum fragst du uns, wenn du gar nicht an einer sauberen Lösung interessiert bist.

    Dann mach es halt so wie du meinst es wäre korrekt...

    Oder aber, du zeigst hier deinen relevanten Code, anhand dem wir zusammen arbeiten können. :)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Ich buchstabiers dir auch nochmal:
    Das Fenster ist bereits geöffnet und die entsprechenden Informationen geladen.
    also ist die Connecion zu, weil - sagen dir ja alle: nachdem was geladen wird, wird die Connection geschlossen
    Wird dann aber eine längere Zeit nichts gemacht und dann zum Beispiel eine Combobox aufgeklappt, ein Eintrag ausgewählt und hierdurch eine Aktion angestoßen,...
    dann musst du eben die Connection öffnen. Sagen dir auch alle: Bevor was geladen wird, wird die Connection geöffnet
    so läuft diese erst einmal ins Leere
    na eben nicht - weil - haste ja grad aufgemacht.
    [...]
    Und wenn die Aktion dann fertig ist - nicht vergessen: Connection wieder zu machen
    Beim zweiten Klick ist alles wieder OK.
    Das ist vlt ein interessanter Punkt: Eiglich kann sich - wenn du wie hier beschrieben vorgehst - zwischen dem ersten und dem 2. Klick überhaupt nichts verändert haben.
    Es geht um die Zeit, in der der User "Nichts macht".
    Wie gesagt: Das sollte vollkommen irrelevant sein, ob und wie lang der User nichts macht.
    Weil die Connection ist ja zu diweil - und ob die 1s zu ist oder 2Stunden - egal
    Hallo an Alle,

    ihr habt ja alle Recht ... das Problem scheint tatsächlich im Code zu stecken. Viele Sachen werden grundsätzlich beim Start der Form geladen. Aktionen, wie eventuell Aufklappen einer ComboBox, sind nicht mit einer Connection versehen. Einmal alles eingelesen; da hilft dann nur das Neuladen der Form.
    Mein Problem scheint schon in der Erstellung der Connection zu liegen. Ich habe beim Googlen für den Bereich in C# ein Beispiel gefunden, dass im Rahmen einer Klasse mit der Connection recht flexibel (so nenne ich es mal laienhaft) umgeht. Mein VB - Lösung funktioniert zwar, aber von Flexibilität kann da keine Rede sein.

    Umgang und Erstellung von Klassen und deren Einsatz, und dies profitabel, ist noch nicht mein Ding. Eine große weiße Wand ... ;( .

    Ich muss jetzt mal schauen, dass ich das C# Projekt in Richtung VB.NET portiere und dann mal an des Übels Wurzel gehe ...


    Gruß vom Doc