Laden...

C Sharp Projekt MySQL Fehlerabfrage bzw. Unterdrückung

Erstellt von iceget vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.564 Views
Thema geschlossen
I
iceget Themenstarter:in
20 Beiträge seit 2011
vor 12 Jahren
C Sharp Projekt MySQL Fehlerabfrage bzw. Unterdrückung

verwendetes Datenbanksystem: MySQL

Hallo liebe MyC# Community,

Meine Anwendung: Lokale Anwendung die via MySQL Datensätze schreibt und liest (über das Internet).

Mein Problem ist das mein Programm solange funktioniert, bis die MySQL Verbindung getrennt wird.
Sobald einmal kurz das Internet weg ist, hängt sich das Programm auf.

Hier ein Auszug aus meinem Quellcode (an diesem Point wo sich das Programm auch im Debug Mode aufhängt):

program.cs:

 ...
 MySQLDatabase checkMySQLdb = new MySQLDatabase();
 int anzahlTableVHSM = int.Parse(checkMySQLdb.executeQueryScalar("SELECT COUNT(*) FROM `TABELLE` WHERE `CODE` LIKE '" + CODE + "';").ToString());
 ...

Hier die MySQL Verbindungsklasse:
MySQLDatabase.cs:

 ...
 class MySQLDatabase
 {
 
string mysql_host = "xxx";
 string mysql_datenbank = "xxx";
 string mysql_benutzername = "xxx";
 string mysql_passwort = "xxx";
 
MySqlConnection MySQLDBConnection;
 
// Datenbankverbindung initialisieren
 public MySQLDatabase()
 {
 string mysql_connect = "server=" + mysql_host + ";database=" + mysql_datenbank + ";uid=" + mysql_benutzername + ";password=" + mysql_passwort + ";";
 MySQLDBConnection = new MySqlConnection(mysql_connect);
 }
 
public void executeQuery(string strSQL)
 {

 try
 {
 MySQLDBConnection.Open();
 MySqlCommand myCommand = new MySqlCommand(strSQL, MySQLDBConnection);
 myCommand.ExecuteNonQuery();
 }
 catch (Exception ex)
 {
 Console.Write(ex.Message);
 
// schreibe ins Logfile
 LogFileGenerator genLog = new LogFileGenerator(); genLog.newLog("SYSTEM MySQLDatabase ExecuteNonQuery", ex.Message);
 
Thread.Sleep(5000);
 
}
 finally
 {
 if (MySQLDBConnection.State == ConnectionState.Open)
 {
 MySQLDBConnection.Close();
 }
 }
 }
 
public object executeQueryScalar(string strSQL)
 {
 
object vReturnValue = null;
 
try
 {
 MySQLDBConnection.Open();
 MySqlCommand myCommand = new MySqlCommand(strSQL, MySQLDBConnection);
 vReturnValue = myCommand.ExecuteScalar();
 }
 catch (Exception ex)
 {
 Console.Write(ex.Message);
 
// schreibe ins Logfile
 LogFileGenerator genLog = new LogFileGenerator(); genLog.newLog("SYSTEM MySQLDatabase executeQueryScalar", ex.Message);
 
Thread.Sleep(5000);
 }
 finally
 {
 if (MySQLDBConnection.State == ConnectionState.Open)
 {
 MySQLDBConnection.Close();
 }
 }
 return vReturnValue;
 }
 

public DataTable getDataTable(string strSQL)
 {
 DataTable myTable = new DataTable();
 
try
 {
 MySQLDBConnection.Open();
 MySqlCommand myCommand = new MySqlCommand(strSQL, MySQLDBConnection);
 MySqlDataAdapter myAdapter = new MySqlDataAdapter();
 myAdapter.SelectCommand = myCommand;
 myAdapter.Fill(myTable);
 }
 catch (Exception ex)
 {
 Console.Write(ex.Message);
 
// schreibe ins Logfile
 LogFileGenerator genLog = new LogFileGenerator(); genLog.newLog("SYSTEM MySQLDatabase getDataTable", ex.Message);
 
Thread.Sleep(5000);
 }
 finally
 {
 if (MySQLDBConnection.State == ConnectionState.Open)
 {
 MySQLDBConnection.Close();
 }
 }
 return myTable;
 }
 }

Ich möcht das wenn keine Datenbankverbindung möglich ist, das er mir dann via LogFileGenerator genLog in das Log schreibt:
konnte die Datebankverbindung nicht herstellen. Versuche in 1 minute wieder.

Jedoch ist mein Problem das ich folgende Hangups bekommen, und die Software hängt sich einfach auf:> Fehlermeldung:

04.08.2011 01:57:13 | SYSTEM: MySQLDatabase ExecuteNonQuery | You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's fantasy. There are two delicious women to every guy! Sineplex wants you to enj' at line 1
04.08.2011 02:03:41 | SYSTEM: MySQLDatabase ExecuteNonQuery | Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
04.08.2011 02:03:46 | SYSTEM: MySQLDatabase ExecuteNonQuery | There is already an open DataReader associated with this Connection which must be closed first.
04.08.2011 02:03:52 | SYSTEM: MySQLDatabase executeQueryScalar | You have specified an invalid column ordinal.

Was bedeutet eigentlich genau die letzte Meldung?

Könnt ihr mir helfen? Über Hilfe würde ich mich sehr freuen!

Ich würde gerne in meine Klasse oder in das Programm einbauen das sich die Software nicht aufhängt, sondern dass das Programm einfach nach
einer Minute wieder versucht beim letzten Datensatz die Verbindung wiederherzustellen und dort weiter zu machen.

Könnt ihr mir helfen?

Vielen Dank!

glg Markus

Hinweis von MarsStein vor 12 Jahren

Bitte benutze Code-Tags zur Formatierung Deiner Beiträge, siehe [Hinweis] Wie poste ich richtig? Punkt 6.

F
10.010 Beiträge seit 2004
vor 12 Jahren

Du kommst nicht zufällig von VB6?

Weil du genau das machst, was man unter .NET nicht machen sollte, stringgefrickel und einer einzelnen connection.
[Artikel] Ressourcen schonen - Datenbanken richtig öffnen und schließen

Auch ist MySql dafür begannt, das es die "kaputte" connection nicht aus dem ConnectionPool entfernt.
Und wenn ich mir den Code so anschaue, solltest du evtl mal grundsätzlich überlegen vorher mal die grundlagen und Spachsyntax von C# nochmal anzuschauen.
Auch DI/IOC (dein logging sieht grausselig aus ) solltest du dir neben dem "using" keyword mal anschauen.

276 Beiträge seit 2007
vor 12 Jahren

"04.08.2011 01:57:13 | SYSTEM: MySQLDatabase ExecuteNonQuery | You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's fantasy. There are two delicious women to every guy! Sineplex wants you to enj' at line 1"

Mal was andres: Was ist denn das für ne Fehlermeldung? 😄

Gruss

nitro

I
iceget Themenstarter:in
20 Beiträge seit 2011
vor 12 Jahren
Re

Hallo!

Danke für Deine Antwort!

Ja Du vollkommen recht. VB6 hab ich einiges gecodet.

In C# möchte ich mich fit machen.

Die Connectionklassen werde ich nochmal überarbeiten.

Weißt du, gibt's ein Online C# LernTutorial? Wenn ja, wäre ich für den Link sehr dankbar!

glg Markus

PS wie könnte man mein Beispiel (program.cs) besser lösen?

Und was meinst Du genau mit DI/IOC bzw. using?

Vielen Dank

3.825 Beiträge seit 2006
vor 12 Jahren

Hallo iceget, hallo nitro,

Du solltest auch dieses lesen :

[Artikelserie] Parameter von SQL Befehlen

In deiner Datenbank kommt ein ' vor, und wenn man den SQL-String per + zusammenbaut kommt dann so eine Fehlermeldung wie Deine.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

276 Beiträge seit 2007
vor 12 Jahren

Hallo iceget,

hier im Forum gibst genug Sachen, schau mal links in der Menüleiste "Artikel" oder "Ressourcen". Da sind viele Sachen schon angegeben. MSDN-Doku tut ihr übriges, wenn du ein spezifisches Problem hast.

Gruss

nitro

EDIT: @ BerndFfm: Den Artikel suchte ich auch grad...zu langsam 😉

F
10.010 Beiträge seit 2004
vor 12 Jahren

@iceget :
Steht alles in den FAQ dieses Forum.
Und die OpenBooks usw stehen sogar ganz prominent links im Hauptmenü der Seite.
Gewöhn dir die typische VB6 herangehensweise erst zu fragen und dann selber zu schauen am besten gleich ab.

Thema geschlossen