Hallo Ihr VB-Experten.
Ich arbeite immoment an einer Konsolenanwendung und hoffe hier auf Hilfe da ich etwas realisieren muss ohne große Ahnung von VB zu haben.
Zur Aufgabe:
Ich habe eine Datenbank mit der Tabelle Scanfiles.
Diese Tabelle aktualisiert sich ständig und dauerhaft (teilweise mehrfach pro Sekunde) und es werden immer wieder neue Zeilen angelegt von verschiedenen Clients.
Für den Server brauche ich nun eine Konsolenanwendung die in einer Endlosschleife immer wieder diese Tabelle abfragt und neue Zeilen einmalig ausliest, verarbeitet und löscht. Leider habe ich keine Idee wie ich dass realisieren kann, egal was ich versuche hat es entweder zur Folge dass die Anwendung seitens VB beendet wird
Ich habe bisher mehrere Dinge versucht aber alles ist irgendwie zum Scheitern verurteilt.
Unten angehängt einmal der Anfang des Sub dass ich geschrieben habe:
Ich habe bisher 4 Sachen versucht aber alles ohne Erfolg:
Versuch 1:
Ich habe dass Sub Recursiv aufgerufen (so wie es hier unten noch zu sehen ist) - also ein Selbstaufruf am Ende - was dazu führt dass eine StackOverflow-Exception erzeugt wird.
Versuch 2: Ich habe via While(true) dass ganze Sub in sich endlos laufen lassen (ihr seht es unten auskommentiert) was zu funktionieren scheint aber dass führt dazu dass ich im Taskmanager sehe dass sich der Prozess immer weiter und weiter aufbläht und dieser immer und immer mehr speicher an sich reißt.
Versuch 3: Ich habe die SQL-Verbindung getrennt und neu aufgebaut vor jedem Aufruf in der Hoffnung dass er dann reservierte/genutzte Resourcen freigibt, leider ändert dass garnichts an Versuch Nummer 2.
Versuch 4: Ich habe die Konsole immer wieder per Clear geleert so dass nur der aktuelle Durchlauf ausgegeben ist - leider ändert auch dass nichts daran dass der Prozess sich wie in Versuch 3 weiter und weiter aufbläht.
Ich hoffe nun hier einige gute Tipps zu bekommen wie ich es hinbekomme dass ich dass Sub endlos immer und immer wieder von vorne arbeiten lassen kann sobald es fertig ist.
Visualisierte Grüße aus RheinlandPfalz
janben
Ps: Erstmal will ich zum testen nur ne Consolenausgabe haben, wenn die einwandfrei läuft soll eigentlich nichts weiter gemacht werden als die Datenbankzeile zu löschen und 3 Werte des Row an eine Kommandozeilenanwendung zu übergeben.
Sub doProcessing()
' While (True)
'MySqlConnection.Close()
'MySqlConnection.Open()
Console.Clear()
Dim stm As String = "SELECT `id`,`prozessid`,`filename`,`zeit`,"
stm = stm & " (SELECT `sourcefolder` FROM `scanprozesse` WHERE `scanprozesse`.`id` = `scanfiles`.`prozessid`), "
stm = stm & " (SELECT `destinationfolder` FROM `scanprozesse` WHERE `scanprozesse`.`id` = `scanfiles`.`prozessid`) "
stm = stm & " FROM `scanfiles` WHERE `zeit` < date_sub(now(), interval 20 Second)"
Dim cmd As MySqlCommand = New MySqlCommand(stm, MySqlConnection)
Dim reader As MySqlDataReader = cmd.ExecuteReader()
While reader.Read()
Console.WriteLine(reader.GetInt32(0) & ": " & reader.GetString(5))
End While
cmd.Dispose()
reader.Close()
' End While
Console.WriteLine("Durchlauf beendet")
doProcessing()
'Console.ReadLine()
End Sub
EDIT: Es hat sich erledigt. Habe es jetzt hinbekommen mit einer While-Endlosschleife. Hatte nur vergessen reader.close() anzuwenden...
Ich arbeite immoment an einer Konsolenanwendung und hoffe hier auf Hilfe da ich etwas realisieren muss ohne große Ahnung von VB zu haben.
Zur Aufgabe:
Ich habe eine Datenbank mit der Tabelle Scanfiles.
Diese Tabelle aktualisiert sich ständig und dauerhaft (teilweise mehrfach pro Sekunde) und es werden immer wieder neue Zeilen angelegt von verschiedenen Clients.
Für den Server brauche ich nun eine Konsolenanwendung die in einer Endlosschleife immer wieder diese Tabelle abfragt und neue Zeilen einmalig ausliest, verarbeitet und löscht. Leider habe ich keine Idee wie ich dass realisieren kann, egal was ich versuche hat es entweder zur Folge dass die Anwendung seitens VB beendet wird
Ich habe bisher mehrere Dinge versucht aber alles ist irgendwie zum Scheitern verurteilt.
Unten angehängt einmal der Anfang des Sub dass ich geschrieben habe:
Ich habe bisher 4 Sachen versucht aber alles ohne Erfolg:
Versuch 1:
Ich habe dass Sub Recursiv aufgerufen (so wie es hier unten noch zu sehen ist) - also ein Selbstaufruf am Ende - was dazu führt dass eine StackOverflow-Exception erzeugt wird.
Versuch 2: Ich habe via While(true) dass ganze Sub in sich endlos laufen lassen (ihr seht es unten auskommentiert) was zu funktionieren scheint aber dass führt dazu dass ich im Taskmanager sehe dass sich der Prozess immer weiter und weiter aufbläht und dieser immer und immer mehr speicher an sich reißt.
Versuch 3: Ich habe die SQL-Verbindung getrennt und neu aufgebaut vor jedem Aufruf in der Hoffnung dass er dann reservierte/genutzte Resourcen freigibt, leider ändert dass garnichts an Versuch Nummer 2.
Versuch 4: Ich habe die Konsole immer wieder per Clear geleert so dass nur der aktuelle Durchlauf ausgegeben ist - leider ändert auch dass nichts daran dass der Prozess sich wie in Versuch 3 weiter und weiter aufbläht.
Ich hoffe nun hier einige gute Tipps zu bekommen wie ich es hinbekomme dass ich dass Sub endlos immer und immer wieder von vorne arbeiten lassen kann sobald es fertig ist.
Visualisierte Grüße aus RheinlandPfalz
janben
Ps: Erstmal will ich zum testen nur ne Consolenausgabe haben, wenn die einwandfrei läuft soll eigentlich nichts weiter gemacht werden als die Datenbankzeile zu löschen und 3 Werte des Row an eine Kommandozeilenanwendung zu übergeben.
Sub doProcessing()
' While (True)
'MySqlConnection.Close()
'MySqlConnection.Open()
Console.Clear()
Dim stm As String = "SELECT `id`,`prozessid`,`filename`,`zeit`,"
stm = stm & " (SELECT `sourcefolder` FROM `scanprozesse` WHERE `scanprozesse`.`id` = `scanfiles`.`prozessid`), "
stm = stm & " (SELECT `destinationfolder` FROM `scanprozesse` WHERE `scanprozesse`.`id` = `scanfiles`.`prozessid`) "
stm = stm & " FROM `scanfiles` WHERE `zeit` < date_sub(now(), interval 20 Second)"
Dim cmd As MySqlCommand = New MySqlCommand(stm, MySqlConnection)
Dim reader As MySqlDataReader = cmd.ExecuteReader()
While reader.Read()
Console.WriteLine(reader.GetInt32(0) & ": " & reader.GetString(5))
End While
cmd.Dispose()
reader.Close()
' End While
Console.WriteLine("Durchlauf beendet")
doProcessing()
'Console.ReadLine()
End Sub
EDIT: Es hat sich erledigt. Habe es jetzt hinbekommen mit einer While-Endlosschleife. Hatte nur vergessen reader.close() anzuwenden...
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „janben“ ()