Laden...

Trotz try/catch mit Response.Write wird ASP.NET-Anwendung beendet

Erstellt von Perhalo vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.281 Views
P
Perhalo Themenstarter:in
22 Beiträge seit 2012
vor 11 Jahren
Trotz try/catch mit Response.Write wird ASP.NET-Anwendung beendet

Hi,

bei meinem Programm soll der Benutzer die Addresse seiner Datenbank eingeben können. D.h. dabei können Fehler durch die Benutzereingabe auftreten, die ich abfangen möchte. Ich hab das jetzt versucht so umzusetzen:



        public static string AccessPfad = "C:\\Tpwerte.mdb";

        protected void Page_Load(object sender, EventArgs e)
        {
            
            try
            {
                AccessDataSource1.DataFile = AccessPfad;
            }

            catch (Exception a)
            {
                // Give the user some information, but                                  
                // stay on the default page
                Response.Write("<h2>Default Page Error</h2>\n");
                Response.Write("<p>Provide as much information here as is " +
                  "appropriate to show to the client.</p>\n");
                Response.Write("Return to the <a href='Default.aspx'>" +
                    "Default Page</a>\n");
                Response.Write(a);
                    
            }
        }

Allerdings wird meine alternative Fehlerseite nicht aufgerufen, sondern weiterhin der Fehler angezeigt und die ASP Anwendung kann nicht weitergeführt werden.

Kann mir da jemand weiterhelfen?
Grüße und Danke im Vorraus

2.207 Beiträge seit 2011
vor 11 Jahren

Hallo Perhalo,

du schreibst mit "Response.Write(...)" einen String raus, und dein letzter ist nun die komlette Exception. in deinem Fall "a".

Bau dir den String zusammen, eventuell unten die Exception dran und schicke ihn (dein HTML und die Exception, wenn du das willst) komplett in das Response.Write. Dann sollte es gehen.

Gruss

Coffeebean

P
Perhalo Themenstarter:in
22 Beiträge seit 2012
vor 11 Jahren

Ich glaube der Fehler liegt woanders. Hauptsächlich daran, dass er den catch Block überhaupt nicht ausführt. Das vermute ich, weil alles was ich in der global.asax.cs unter nicht behandelten Fehlern ausführen lasse, er auch macht.

Das funktioniert zwar, so dass ich den Benutzer bei einem Fehler immer wieder zu derselben Stelle zurückführen kann. Allerdings möchte ich ja hier auch anzeigen können, dass ein falscher Pfad eingegen wurde bzw. eine nicht geeignete Datenbank vorliegt.

5.658 Beiträge seit 2006
vor 11 Jahren

Hi Perhalo,

wird denn dann überhaupt die Page_Load-Methode ausgeführt?

Christian

Weeks of programming can save you hours of planning

2.207 Beiträge seit 2011
vor 11 Jahren

Hallo Perhalo,

wieso prüfst du die Datenbankverbindung nicht kurz im try/catch? Hauts hin ist gut, wenn nciht sollte er in den catch gehen und alles da ausführen, was du beschreibst.

Gruss

Coffeebean

P
Perhalo Themenstarter:in
22 Beiträge seit 2012
vor 11 Jahren

Jo,

halt jedesmal, wenn ich das entprechende Formular öffnen will, wird Page_Load ausgeführt. Mit einer falschen Addresse für die Datenbank bekomme ich den Fehler

Serverfehler in der Anwendung /.
Datei 'C:\Tpwerte.mdb' nicht gefunden.

Ausnahmedetails: System.Data.OleDb.OleDbException: Datei 'C:\Tpwerte.mdb' nicht gefunden.

und so weiter...

Was ganz interessant ist:

Habe jetzt weitergemacht und versuche auf meine TemplateFields zuzugreifen. Wenn ich einfach nur das hier dazufüge:



            try
            {
                AccessDataSource1.DataFile = AccessPfad;
                Einzelspur_LI_SOLL = ((TextBox)GridView1.FindControl("TextBox4")).ReadOnly;
               }

wird die Exception ausgelöst und ich erhalte das gewünschte Ergebnis. Allerdings triggert er auf den Fehler der neuen Zeile und nicht auf den der alten...

Add Coffeebean: Wenn ich die Verbindung richtig einstelle geht es ohne Probleme. Allerdings kann es ja sein, dass der Benutzer etwas falsches als Pfad oder eine falsche Datenbank eingibt. Das möchte ich natürlich abfangen. Darum möchte ich, dass die Anwendung nicht einfach abschmiert, wenn der Benutzer eine falsche Eingabe macht.