Zugriff auf DB geht verloren, wie Fehler abfangen

  • VB.NET

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

    Zugriff auf DB geht verloren, wie Fehler abfangen

    Hi Leute,

    bin neu im Bereich VB Programmierung und bin derzeit auf ein kleines Problem gestoßen.
    Habe ein Kleines Programm geschrieben das über die Datenquellen auf eine Datenbank zugreift die im Netzwerk ligt und Daten über ein Data Grid View ausgibt (Über einen Timer wird diese DB alle 10 Minuten aktualisiert (Befehl: „Me.JobTableAdapter.Fill(Me.SmV2DataSet1.Job)“).

    In Verwendung ist Microsoft Visual Studio Express 2015.

    Hab nun versucht über eine Goto Resume Next oder Try und Catch den Fehler abzufangen falls mal die Verbindung zur Datenbank unterbricht mir nicht gleich immer das ganze Programm auf Fehler läuft. Ich möchte gerne das wenn das Programm nicht auf die Datenquelle zugreifen kann, Data Grid View nicht aktualisiert wird und gegeben falls eine Meldung in einer Message box ausgegeben wird.

    Derzeit ist bei Jedem Versuch sobald dich die Verbindung getrennt habe das Programm abgestürzt.

    Vielleicht habt Ihr ein paar Tipps für mich wie ich diesen Fehler abfangen kann.

    Vielen Dank schon mal im Voraus
    withewolf
    Hallo VB1963,

    habe keinen Code. Mein Ablauf bis jetzt war Form öffnen, Verbindung über "Datenquelle" in Menü herstellen - Anlegen vom Timer - Anlegen von Dataset (mit SQL Abfrage bestimmte Zeilen der DB ausgegrenzt) - anlegen von Data Grip View im Formular mit dem zuvor angelegtem Dataset - Timer wird beim Öffnen vom Formular gestartet über den Befehl

    VB.NET-Quellcode

    1. tim_aktuallisierung_job.Enabled = True
    und im Timer sowie im Form Load habe ich die Zeile

    VB.NET-Quellcode

    1. Me.JobTableAdapter.Fill(Me.SmV2DataSet1.Job)
    stehen zum Aufrufen der Daten.

    Mehr Code habe ich derzeit nicht im Project =).

    Fehler:
    - Habe ich vom Anfang an keine Verbindung zur Datenquelle lässt er mich das Programm gar nicht starten -> Geht für mich so in Ordnung da man Ohne Daten doch nicht arbeiten kann ;)
    - Habe ich am Anfang eine Verbindung funktioniert das Programm solange bis ich die Netzwerkverbindung trenne (Programm stürzt ab beim nächsten Aktualisierungsversuch des Timers) – Hier sollte eine Message Box auftauchen das die Verbindung verloren gegangen ist und die Daten die zum Verbindungsabbruch noch in der Data Grip View standen sollten dort so bleiben wie sie sind.

    Wies nicht existiert eine Möglichkeit diese Verbindung abzufragen das ich mir hier mit einer If oder Ähnlichem helfen kann (wenn keine Verbindung mach keine Aktualisierung, sonst ja)

    Hoffe ich konnte es einigermaßen verständlich erklären.

    Danke
    Grüße
    withewolf
    Du machst die Verbindung zur DB, inkl. dem Laden der Daten also nicht per Code, sondern hast dir das im Designer zusammen geklickt?
    "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
    vermutlich - auch die Bezeichnungen deuten auf ein generiertes typisiertes Dataset hin, inklusive typisierter TableAdapter.
    Letzterer scheint mir auch einen Ansatz zur Lösung zu geben: Wenn ich recht erinnere hat son TableAdapter eine Connection-Property.
    Und eine Connection hat eine ConnectionState-Property.
    Und damit kann man prüfen, ob die Connection offen ist.

    Was aber auch nix nutzt, denn im Normalfall sollte sie immer geschlossen sein, der tableAdapter öffnet sie intern automatisch, wenn er Daten abruft - und schließt sie hinterher auch ordentlich wieder.

    Es ist ungewöhnlich, dass eine Db so oft nicht erreichbar zu sein scheint - ja, da hilft dann ein TryCatch, dann wird ja in 10 min erneut probiert.
    Hi euch beiden und danke erst mal für die Antworten,

    ja alles im Designer bis jetzt.
    Hab nach mehreren Versuchen gesehen das ich mit dem Status der Verbindung zur Datenbank abzufragen ziemliche Probleme habe.
    Somit habe ich mir jetzt einen anderen Ansatz überlegt:

    Habe folgenden Code gefunden der mir zu den in Reichweite verfügbaren Netzwerken verschiedene Infos ausgibt:

    VB.NET-Quellcode

    1. Dim proc As New System.Diagnostics.Process()
    2. proc.StartInfo.FileName = "netsh"
    3. proc.StartInfo.Arguments = "wlan show networks mode=bssid"
    4. proc.StartInfo.RedirectStandardOutput = True
    5. proc.StartInfo.UseShellExecute = False
    6. proc.Start()
    7. Dim StrArray As String = proc.StandardOutput.ReadToEnd()


    Nun würde ich hier aber nur die Signalstärke eines Netzwerkes mit einer Bestimmten SSID benötigen und ob ich zu diesem verbunden bin.

    Kann ich das auf irgendeine Weise filtern?
    Mich interessiert nur der Teil mit Signal und hier nur der dahinterstehende Wert zu einer bestimmten SSID. z.B. 60%, und ob ich zu dem verbunden bin.

    Hiermit könnte ich überprüfen ob ich Verbindung zum WLAN habe und auf Basis dessen die Verbindung trennen oder aufbauen.
    Was haltet Ihr davon? Und wie könnte ich mir nur genau diese Informationen aus diesem String holen?

    Hab es schon mit folgenden Code versucht, denke aber es gibt hier sicher einen einfacheren Weg =).
    Zudem holt mir dieser nicht den Bestimmten (mit dieser SSID) heraus wenn ich mehrere WLAN-Netzwerke habe.

    VB.NET-Quellcode

    1. 'WLAN überprüfen
    2. Dim proc As New System.Diagnostics.Process()
    3. proc.StartInfo.FileName = "netsh"
    4. proc.StartInfo.Arguments = "wlan show networks mode=bssid"
    5. proc.StartInfo.RedirectStandardOutput = True
    6. proc.StartInfo.UseShellExecute = False
    7. proc.Start()
    8. Dim StrArray As String = proc.StandardOutput.ReadToEnd()
    9. 'Wert anfang suchen
    10. Dim anfang As Integer
    11. Dim FindThisString As String = "Signal : "
    12. If StrArray.Contains(FindThisString) Then
    13. anfang = StrArray.IndexOf(FindThisString)
    14. End If
    15. 'Teil auslesen
    16. Dim Signal As String = Replace(StrArray.Substring(anfang + 21, 3), "%", "")
    17. MsgBox(Signal)


    Vielen Dank
    Grüße
    withewolf

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „withewolf“ ()

    @withewolf eine Verbindung zur DB kann auch aus anderen Gründen temporär abreißen...

    Würde das auch eher mit nem sauberen Try/Catch abfangen als da jetzt irgendwelche dubiosen Workarounds zu versuchen.
    "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