Hallo,
ich habe ein Probelm mit der OracleConnection. Ich baue mit folgendem Code eine gepoolte Verbindung zur Datenbank auf.
string connectionString = get_connectionString(item.DBName);
using (OracleConnection connection = new OracleConnection() )
{
connection.ConnectionString = connectionString;
connection.Open();
OracleCommand command = connection.CreateCommand();
command.CommandText = item.SQL;
OracleDataReader reader = command.ExecuteReader();
DataTable data = new DataTable();
data.Load(reader, LoadOption.OverwriteChanges);
reader.Close();
connection.Close();
}
Solange die Datenbank verfügbar ist, habe ich auch absolut keine Probleme. Aber sobald die Datenbank mal nicht erreichbar ist, weil es Netzwerkprobleme gibt, oder weil sie heruntergefahren ist, bekomme ich logischer weise eine Fehlermeldung, das die Verbindung unerwartet unterbrochen wurde (Ora-03113). Damit kann ich auch noch leben, da das ein normales verhalten ist. Aber sobald ich Datenbank wieder erreichbar ist, und ich mit dem selben nicht neugestarteten Programm versuch auf die DB zu zu greifen, kommt immer noch der Fehler ORA-03113. Die gepoolte Verbindung versucht gar nicht erst die Verbindung wieder neu auf zu bauen.
Ich hatte versucht mittels try catch die Exception abzufangen und alle Pools zu schließen.
try{
string connectionString = get_connectionString(item.DBName);
using (OracleConnection connection = new OracleConnection() )
{
connection.ConnectionString = connectionString;
connection.Open();
OracleCommand command = connection.CreateCommand();
command.CommandText = item.SQL;
OracleDataReader reader = command.ExecuteReader();
DataTable data = new DataTable();
data.Load(reader, LoadOption.OverwriteChanges);
reader.Close();
connection.Close();
}
}
catch(Exception ex){
OracleConnection.ClearAllPools();
}
Leider funktioniert das nicht. Kann mir bitte jemand helfen, ich weiß nicht mehr weiter...
Danke
mfG Hans
Dein ganzer Sermon lässt sich also incl. Fehlerbehebung in 4 Zeilen schreiben.
DataTable data = new DataTable();
OracleConnection.ClearAllPools();
OracleDataAdapter adapter = new OracleDataAdapter(item.SQL, get_connectionString(item.DBName) );
adapter.Fill(data);
Hmm, welche Oracle Connection ist denn das?
aus .net oder die von Oracle? also mit der von Oracle hatte ich noch nie solche Probleme.
@FZelle Du hättest ein wenig weiter lesen sollen.. er hatte bereits ClearAllPools im Exception Block ausgeführt.
Grüße
Hmmm das Problem besteht weiterhin.
Ich nutze noch das .Net Framework. In das von Oracle habe ich mich noch nicht eingearbeitet.
mfG Hans
Dann solltest Du umsteigen..
Die OracleConnection von MS ist schon lange obsolete und wird nicht mehr weiterentwickelt. Gugst Du hier:
Installier dir den Oracle Treiber, und binde deren Dll ein. Die usage sollte fast die selbe sein. Denke dann sollte der Fehler auch gegessen sein.
Grüße