PDA

View Full Version : .net Connection - Problem nach Verlust der Connection



Oli001
21-08-12, 08:22
Hallo,
ich habe eine C#-Klasse, die mir eine Connection zur AS400 zur Versügung stellt. Wenn diese Verbindung abbricht und nach einer Zeit wieder hergestellt wird, dann kann die Verbindung nicht mehr aufgebaut werden.

So sieht mein Code aus:


public static class AS400Connection {
private static String connectionString = "";
private static System.Data.OleDb.OleDbConnection conn;
public static OleDbConnection getConnection()
{
try
{
if (conn == null || conn.State != System.Data.ConnectionState.Open)
{
getNewConnection();
return conn;
}
else
{
return conn;
}
}
catch (Exception)
{
return null;
}
}
public static void closeConnection()
{
if (conn != null && conn.State != System.Data.ConnectionState.Closed)
{
conn.Close();
}
}
public static void getNewConnection()
{
conn = new System.Data.OleDb.OleDbConnection(connectionString );
try
{
conn.Open();
}
catch (Exception)
{
conn = null;
}
}
}


Wenn die Connection fehlschlägt wird das im catch abgefangen und versucht eine neue Verbindung aufzubauen. Egal wie, es funktioniert nicht. Ich bekomme keine neue Connection.

Hab ich da nen Denkfehler oder woran kanns liegen??

btw.: Im ConnectionString stehen natürlich die korrekten Connection-Infos

Danke Oli

Fuerchau
21-08-12, 09:27
Wenn du Fehler abfängst, solltest du eine variable deklarieren und dir die Fehlernachricht ausgeben (z.B. über Trace-Ausgabe).

Zusätzlich kannst du Ereignisse des Conn-Objektes überwachen und auf ein Close der Verbindung reagieren.

Da bei OLEDB auch Nicht-.Net-Komponenten betroffen sind, ist ein Dispose des Conn-Objektes nach dem Close erforderlich.

Bei Verbindungen gibt es auch einen Connection-Pool der intern verwaltet wird.
Nach einem Close/Disconnect landet die Verbindung im Pool und wird beim nächsten Open wiederverwendet.

Aber wie oben geschrieben, wichtig ist die Fehlernachricht der Exception.

ExAzubi
21-08-12, 09:30
Also wie ich das sehe, wird im Fehlerfall keine neue Conenction aufgebaut! try/catch fängt ab und setzt die conn auf NULL in der Methode getNewConnection().

Wo ist der Wiederaufbauversuch?