HighTechTalks DotNet Forums  

OleDb and Exception handling?

Dotnet VJSharp microsoft.public.dotnet.vjsharp


Discuss OleDb and Exception handling? in the Dotnet VJSharp forum.



Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old   
Christian-Josef Schrattenthaler
 
Posts: n/a

Default OleDb and Exception handling? - 06-12-2005 , 08:58 AM






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.



Reply With Quote
  #2  
Old   
Christian-Josef Schrattenthaler
 
Posts: n/a

Default Re: OleDb and Exception handling? - 06-14-2005 , 03:07 AM






Hi Lars-Inge!

Quote:
Don't believe all your read on the internet., =)
But I don't really know which one I can trust or untrust...

Quote:
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.
I dind't know this, but I know "Mr. Garbage" from my Java-Learning-Book
;-)

Quote:
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/de...ogether_PG.asp
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.



Reply With Quote
  #3  
Old   
Christian-Josef Schrattenthaler
 
Posts: n/a

Default Re: OleDb and Exception handling? - 06-14-2005 , 01:40 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.



Reply With Quote
Reply




Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.