Laden...

Refresh Oracle Connection

Erstellt von Net_Hans vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.317 Views
N
Net_Hans Themenstarter:in
70 Beiträge seit 2010
vor 11 Jahren
Refresh Oracle Connection

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

F
10.010 Beiträge seit 2004
vor 11 Jahren
  1. Kannst du das alles in 2 Zeilen schreiben wenn du den DataAdapter benutzt.
  2. Solltest du mal in die Doku schauen findest du bei OracleConnection ein ClearPool oder ClearAllPools.

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);

849 Beiträge seit 2006
vor 11 Jahren

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

N
Net_Hans Themenstarter:in
70 Beiträge seit 2010
vor 11 Jahren

Hmmm das Problem besteht weiterhin.

Ich nutze noch das .Net Framework. In das von Oracle habe ich mich noch nicht eingearbeitet.

mfG Hans

849 Beiträge seit 2006
vor 11 Jahren

Dann solltest Du umsteigen..

Die OracleConnection von MS ist schon lange obsolete und wird nicht mehr weiterentwickelt. Gugst Du hier:

OracleConnection

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