Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Datenbank Update in angegebener Zeit
murashi
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

Datenbank Update in angegebener Zeit

beantworten | zitieren | melden

Hallo zusammen,

- bin der neue hier - falls ich gleich mal das falsche Topic erwischt habe, so bitte ich um Entschuldigung.

Ich hätte da gerne ein Problem, und zwar möchte ich mit meinem Programm Datenbankwerte updaten und das ganze soll in angegebener Zeit stattfinden.

Kurz zu meinem Programm: Das Programm dient dazu meine WAN-iP in eine MySQL Datenbank zu laden und dann (als Beispiel) alle 30 Minuten ein Update der WAN-iP durchzuführen.

Ich hab da schon an einer Lösung gearbeitet, allerdings funktioniert das ganze nicht.
- Ich habe einen Timer erstellt (dieser Funktioniert soweit)

Danach folgendes:


private void updateSchleife_tick(object sender, DoWorkEventArgs e)
{
    do
    {
      refresh_loop();
      con.Close();
     }
     while (running == true);
}

Die Do-While Schleife ruft die Methode "refresh_loop" auf und in dieser steht mein Update.


private void do_refresh_loop()
{
 getwanip(wan);
 if (kundenummer.Text == tochecknum)
 {
    update("UPDATE dns SET ip='" + wan.Text + "', port='" + port.Text + "' WHERE kundennummer='"     + kundenummer.Text + "'");
   //MessageBox.Show("Update erfolgreich!");
}
else
{
  insert("INSERT INTO dns (`kundennummer`, `ip`, `port`) VALUES ('" + kundenummer.Text + "', '" + wan.Text + "', '" + port.Text + "');");
  //MessageBox.Show("Ihre Daten wurden erfolgreich eingetragen!");
}
loadid("SELECT id FROM dns WHERE kundennummer='" + kundenummer.Text + "'");
loadconfig("SELECT * FROM dns WHERE id='" + getid + "'");
SetText(getip + ":" + getport);
} 


Die Methode "refresh_loop" ruft meine Update-Methode auf. (Die Insert-Methode wird derzeit nicht benutzt/gebraucht)
Diese sieht wie folgt aus:


private void update(string query)
{
  con.Open();
  using (var cmd = new MySqlCommand(query, con))
  {
    cmd.ExecuteNonQuery();
  }
  con.Close();
}

Nun das Problem: Der erste Schleifen-Durchgang funktioniert, beim zweiten steigt mir das Programm aus und wirft folgenden Fehler aus:

Fehler
An unhandled exception of type 'System.InvalidOperationException' occurred in MySql.Data.dll

Additional information: The connection is already open.


So wie das aussieht, wird das "con.Close" ignoriert. Frag mich wieso. Vielleicht könnt ihr mir da helfen.

Grüße
private Nachricht | Beiträge des Benutzers
Jamikus
myCSharp.de - Member



Dabei seit:
Beiträge: 251
Herkunft: Oberhausen (NRW)

beantworten | zitieren | melden

[Artikel] Debugger: Wie verwende ich den von Visual Studio?

Schon selbst nachgeschlagen, ob diese Anweisung anvisiert wird?
private Nachricht | Beiträge des Benutzers
vbprogger
myCSharp.de - Experte

Avatar #avatar-1820.gif


Dabei seit:
Beiträge: 1723
Herkunft: NRW/DE

beantworten | zitieren | melden

... und con.State prüfen, bevor con.Open() aufgerufen wird.
Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.
---------
Bemerkung: ich beantworte keine Fragen via PM, denn das Forum soll ja was davon haben!
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2461
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

Verwende dazu saubere Using-Statements und [Artikelserie] SQL: Parameter von Befehlen
private Nachricht | Beiträge des Benutzers
murashi
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

beantworten | zitieren | melden

@vbprogger:

Der Tip war jetzt echt gut, habe ich gerade eingebaut und siehe da - die Schleife läuft sauber mehrmals durch. Ich hab über den Debugger den Durchgang jetzt 4 mal durchgeführt ohne Auswurf eines Fehlers.

Das gefällt mir jetzt sehr. Muss mal gucken, ob das die Lösung ist.

@Coffeebean:

Danke für den Link, den schaue ich mir doch direkt mal an.

Gruß
private Nachricht | Beiträge des Benutzers
murashi
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

beantworten | zitieren | melden

Die Lösung:

Zum einen bitte Coffeebean's Link beachten:


// "ConfigurationManager.AppSettings["sqlcon"])" durch eigene Einstellungen ersetzen.
private void update(string query)
{
  using (MySqlConnection con = new MySqlConnection(ConfigurationManager.AppSettings["sqlcon"]))
  {
     con.Open();
     using (var cmd = new MySqlCommand(query, con))
     {
       cmd.ExecuteNonQuery();
      }
      con.Close();
  }
}


Und zum anderen:


if (con.State == ConnectionState.Closed)
{
  con.Open();
}

Wobei ich glaube, das letzteres unnötig ist - aber ich hefte es trotzdem an.

Danke für die freundliche Hilfe.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von murashi am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16148

beantworten | zitieren | melden

Kurz als Anmerkung zum Code murashi: er ist weder test- noch wartbar.
Schau Dir den Repository Pattern an.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
murashi
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

beantworten | zitieren | melden

Vielen Dank für den Hinweis; aber das sagt mir leider gar nichts. Muss ich mir mal anschauen. Jedenfalls hört sich das sehr interessant an.

Gruß
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16148

beantworten | zitieren | melden

Deswegen hab ich Dir gesagt: schau es Dir an.
Dass es Dir nichts sagt, das sieht man am Code
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
murashi
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

beantworten | zitieren | melden

Niemand wird als Experte geboren. ;)

Moderationshinweis von Abt (20.10.2015 - 15:06:31):

Bitte keine Fullquotes mehr ;-)
[Hinweis] Wie poste ich richtig? 2.3

private Nachricht | Beiträge des Benutzers