Avatar billede stephanryer Nybegynder
21. marts 2007 - 18:57 Der er 13 kommentarer og
1 løsning

catche bestemt fejl

Jeg har nogle sider, der alle nedarver fra min BasePage, som så nedarver fra Page.

I min BasePage håndterer jeg fejl i min OnError-metode. Hver gang en af mine sider kaster en exception, så redirectes brugeren til en fejl-side. Dette gør, at ligemeget hvilken fejl der sker, så får brugeren en besked om dette på en præsentabel måde.

Dog er det er lille "men":

Jeg får nogen gange en deadlock fejl i databasen grundet en anden kode, der laver locks på nogle tabeller. Når denne fejl sker, håndteres det af en eller anden grund ikke af OnError og brugeren ser istedet en ASP.NET fejlside.

Fejlen lyder som følger:

"Transaction (Process ID 181) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction."

Er de rnogen der ved, hvorfor denne fejl ikke håndteres som alle de andre exceptions og gribes i OnError?

Og hvordan giver jeg en brugervenlig meddelelse i dette tilfælde?

På forhånd tak.
Avatar billede zeroaim Nybegynder
21. marts 2007 - 19:27 #1
Mit gæt er, at det er fordi det ikke er en Exception som sådan. Det bliver returneret fra DB'en, at der var timeout.

Måske du skal tjekke efter timeout på din DB connection?

Det er altså bare et gæt det her !!!
Avatar billede stephanryer Nybegynder
21. marts 2007 - 19:40 #2
Well fejlen sker jo grundet en dead lock i dette tilfælde. De tilfælde hvor fejlen opstår er ved relativt kortvarige kald, hvor jeg blot foretager simple udtræk.
Avatar billede zeroaim Nybegynder
21. marts 2007 - 19:44 #3
Ja det er som sagt ikke noget jeg ved ret meget om :-(

Men hvilken exception bliver der kastet i koden?
Avatar billede stephanryer Nybegynder
21. marts 2007 - 19:52 #4
Exception Details: System.Data.SqlClient.SqlException: Transaction (Process ID 181) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
Avatar billede zeroaim Nybegynder
21. marts 2007 - 20:12 #5
Ja så er jeg ude af den her :-) Hvis du samler alle exceptions op, men den her får lov at falde igennem, så ved jeg da virkelig ikke hvad der sker.

Ked af at jeg ikke kan hjælpe dig.

Følger lige lidt med på sidelinien.
Avatar billede pfp Nybegynder
21. marts 2007 - 20:57 #6
Foretager du kaldet fra en anden tråd?
Avatar billede stephanryer Nybegynder
21. marts 2007 - 22:29 #7
Nej det synes jeg ik jeg gør. Altså jeg kører ingen andre tråde en main-tråden på noget tidspunkt. Så jeg fatter ik at den exception ikke bliver grebet af min OnError-metode :(
Avatar billede pfp Nybegynder
21. marts 2007 - 22:39 #8
Kan du ikke med debuggeren eller trace se hvilke tråde der kører tidspunktet for fejlen. Hvis din exception raises fra en anden tråd er det ikke sikkert den bliver fanget på din gui tråd...
Avatar billede stephanryer Nybegynder
22. marts 2007 - 08:11 #9
Well det er en webapp. Kan prøve at køre det i debuggin mode og se.
Avatar billede stephanryer Nybegynder
22. marts 2007 - 09:53 #10
Min stack trace ser således ud:


[SqlException (0x80131904): Transaction (Process ID 76) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.]
  System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +859322
  System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +736198
  System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +188
  System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +1959
  System.Data.SqlClient.SqlDataReader.HasMoreRows() +150
  System.Data.SqlClient.SqlDataReader.ReadInternal(Boolean setTimeout) +214
  System.Data.SqlClient.SqlDataReader.Read() +9
  System.Data.Common.DataAdapter.FillLoadDataRow(SchemaMapping mapping) +156
  System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue) +153
  System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords) +283
  System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +221
  System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior) +162
  System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) +107
  shop_vare_varesaet_gruppe.GetTable(SqlCommand cmd) +111
  shop_vare_varesaet_gruppe.get_VareTable() +1096
  shop_vare_varesaet_gruppe.OnPreRender(EventArgs e) +69
  System.Web.UI.Control.PreRenderRecursiveInternal() +77
  System.Web.UI.Control.PreRenderRecursiveInternal() +161
  System.Web.UI.Control.PreRenderRecursiveInternal() +161
  System.Web.UI.Control.PreRenderRecursiveInternal() +161
  System.Web.UI.Control.PreRenderRecursiveInternal() +161
  System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1360
Avatar billede stephanryer Nybegynder
22. marts 2007 - 11:15 #11
Jeg har fundet ud af, hvad der forsagede fejlen.

I den metode jeg håndterede fejlen i, udsendte jeg en email herom. Dette kunne i nogen tilfælde også kaste en exception, som jo så ikke blev håndteret.

Dumme bajer på min regning :)

Men I må gerne lige lægge et svar begge to, så deler I point, som tak for interessen :)
Avatar billede pfp Nybegynder
22. marts 2007 - 11:57 #12
Sådan kan det jo gå, en god tur igennem koden med debuggeren er aldrig helt af vejen :)
Avatar billede zeroaim Nybegynder
22. marts 2007 - 23:13 #13
Jeg springer over her. Var vist ikke til meget hjælp :-)
Avatar billede stephanryer Nybegynder
22. marts 2007 - 23:19 #14
fair :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester