all groups > vj# > june 2005 >
You're in the

vj#

group:

OleDb and Exception handling?


OleDb and Exception handling? Christian-Josef Schrattenthaler
6/12/2005 12:00:00 AM
vj#: Hi!

I wrote a method to get some data from an access file. In an other topic
someone told me, I have an error in my exception handling, because, on an
error the connections wouldn't be closed.

I tried to resolve the problem by myself, but it doesn't work.

Can anyone look at my code, and give me a hint?

***
// Diese Methode holt die Daten aus der Datenbank. Achtung: Diese Methode
benötigt "System.Data.OleDb.*"!
public boolean ErstelleStandortListe()
{
// Exception(s) mit try und catch:
try
{
// Einstellungen für den Datenbankzugriff festelgen:
String connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;";
connectionString += "Data Source=" + ordner + dateiname + ";";
// SQL-Befehl, der dan die Datenbank gesendet werden soll, erstellen:
String sql = "SELECT Postleitzahl, Ort, Name FROM Tabelle1 WHERE
Postleitzahl BETWEEN " +plzBereichSQL;
// Neues OleDBConnection Objekt erstellen:
OleDbConnection conn = new OleDbConnection(connectionString);
// Neues OleDbCommand Objekt erstellen
OleDbCommand cmd = new OleDbCommand(sql, conn);
// Datenbankverbindung öffnen:
conn.Open();
//
OleDbDataReader daten = cmd.ExecuteReader();
// Prüfen, ob Daten vorhanden sind:
if(daten.Read())
{
// Wenn Daten gefunden wurden:
//
Table2.set_DataSource(daten);
//
Table2.DataBind();
//
daten.Close();
// Datenbankverbindung schließen:
conn.Close();
// Ok zurückgeben:
return true;
}
else
{
// Wenn keine Daten gefunden wurden:
daten.Close();
// Datenbankverbindung schließen:
conn.Close();
// Eine entsprechende Meldung an Panel3msg übergeben:
Panel3Msg.set_Text("Es konnten keine zur Auswahl passenden Daten gefunden
werden!");
// Einen Fehler melden:
return false;
}
}
catch(OleDbException e)
{
// Wenn während der ListenErstellung eine OleDbException aufgetreten ist,
eine Meldung an
// Panel3Msg übergeben:
Panel3Msg.set_Text("Bei der Erstellung der StandortListe ist ein Fehler
aufgetreten.<p>Der Administrator wurde bereits per E-Mail darüber
informiert.<p>Bitte versuchen Sie es zu einem späteren Zeitpunkt
nochmals...");
// Eine E-Mail mit der FehlerMeldung an den Administrator senden:
SendeFehlerEmail(e.toString());
// Und einen Fehler zurückgeben:
return false;
}
}
***

Thanks and Greetings,
christian.

Re: OleDb and Exception handling? Lars-Inge Tønnessen [VJ# MVP]
6/13/2005 9:04:11 PM
[quoted text, click to view]

Don't believe all your read on the internet., =:o)

The .NET framework will close the connection when your method ends (or goes
out of the "{ ... }" ). The garbage collector will do this for you. But, yes
you should close it as a good practice.

You could do a second try - catch - finally inside your try - catch.
Eg.

try // your old try-catch
{

OleDbConnection conn = new OleDbConnection(connectionString);

try
{
conn.open();
//do your sql stuff here... Execute sql statements etc...
}
catch ( Exception eeee )
{
// It went wrong...
}
finally
{
// Close the connection. This will always run.
conn.close();
}


}
catch (...) // your old try - catch


Here is a short article. It's C#, but it will do:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vclrfUsingCatchFinallyTogether_PG.asp


Regards,
Lars-Inge Tønnessen

Re: OleDb and Exception handling? Christian-Josef Schrattenthaler
6/14/2005 9:07:35 AM
Hi Lars-Inge!

[quoted text, click to view]
But I don't really know which one I can trust or untrust...

[quoted text, click to view]
I dind't know this, but I know "Mr. Garbage" from my Java-Learning-Book
;-)

[quoted text, click to view]
I have the try/catch-system from my Java-Learning-Book. I searched for
this, because I am now in section 7, and exceptions are in section 13,
so I didn't know I can use a try/catch in an try/catch... I will try to
change my code...

Thanks and greetings,
christian.
Re: OleDb and Exception handling? Lars-Inge Tønnessen [VJ# MVP]
6/14/2005 4:54:22 PM
[quoted text, click to view]

Please remember I'm talking about "try - catch - finallty", not only "try -
catch".

"Finally Clauses
You may have seen the try...catch statement used in exception handling. With
such a statement, a block of code is tried (executed), and any exceptions
thrown as a result are directed to the various catch clauses. This type of
statement also supports the use of a "finally" clause, which is a block of
code that is executed whether or not the try block completes normally,
results in an exception, or exits the containing method. A finally clause is
therefore useful as a cleanup mechanism, and try...finally can be used
without catch, and without specifically using exceptions. "

I stole this text from the Sun tip (Tech Tips: September 15, 1998)
http://java.sun.com/developer/TechTips/1998/tt0915.html


Here is the Java syntax.
http://www.janeg.ca/scjp/flow/try.html


Regards,
Lars-Inge Tønnessen

Re: OleDb and Exception handling? Christian-Josef Schrattenthaler
6/14/2005 7:40:19 PM
Hi Lars-Inge!

I know finally, but I wasn't able to create a code which worked. I tried
many samples, and many hours but now I gave up. I changed my complete code
like your sample for checking if Data is available or not.

Look at this:
***
// Diese Methode holt die Daten aus der Datenbank. Achtung: Diese Methode
benötigt "System.Data.OleDb.*"!
public boolean ErstelleStandortListe()
{
// Einstellungen für den Datenbankzugriff festelgen:
String connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;";
connectionString += "Data Source=" + ordner + dateiname + ";";
// SQL-Befehl, der an die Datenbank gesendet werden soll, erstellen.
Wichtig ist dabei
// die Eingrenzung des PLZ-Gebietes und die aufsteigende Sortierung nach
// Postleitzahl und Name:
String sql = "SELECT Postleitzahl, Ort, Name FROM Tabelle1";
sql += " WHERE Postleitzahl BETWEEN " +plzBereichSQL + " ORDER BY
Postleitzahl, Name ASC";
// Neues OleDBConnection Objekt "conn" erstellen:
OleDbConnection conn = new OleDbConnection(connectionString);
// Neues OleDbDataAdapter Objekt "da" erstellen
OleDbDataAdapter da = new OleDbDataAdapter(sql, conn);
// Neues DataTable Objekt "dt" erstellen:
DataTable dt = new DataTable();
try
{
// DataTable "dt" mithilfe vom OleDbDataAdapter "da" füllen:
da.Fill(dt);
// Prüfen, ob passende Daten in der Datenbank gefunden wurden:
if (dt.get_Rows().get_Count() > 0 )
{
// Wenn passende Daten gefunden wurden:
// Der "Table2" als Datenquelle "dt" zuweisen
Table2.set_DataSource(dt);
// "Table2" binden:
Table2.DataBind();
// Ok zurückgeben:
return true;
}
else
{
// Wenn keine passenden Daten gefunden wurden:
// Eine entsprechende Meldung an Panel3msg übergeben:
Panel3Msg.set_Text("Es konnten keine zur Auswahl passenden Daten gefunden
werden!");
// Einen Fehler melden:
return false;
}
}
catch(OleDbException e)
{
// Wenn während der ListenErstellung eine OleDbException aufgetreten ist,
eine Meldung an
// Panel3Msg übergeben:
Panel3Msg.set_Text("Bei der Erstellung der StandortListe ist ein Fehler
aufgetreten.<p>Der Administrator wurde bereits per E-Mail darüber
informiert.<p>Bitte versuchen Sie es zu einem späteren Zeitpunkt
nochmals...");
// Eine E-Mail mit der FehlerMeldung an den Administrator senden:
SendeFehlerEmail(e.toString());
// Und einen Fehler zurückgeben:
return false;
}
}
***

I think this works fine for my???

Greetings,
christian.

Re: OleDb and Exception handling? Lars-Inge Tønnessen [VJ# MVP]
6/21/2005 12:00:00 AM

[quoted text, click to view]

I have not testet your code, but it looks like it should run without any
problems. =:o)


Regards,
Lars-Inge Tønnessen

AddThis Social Bookmark Button