Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

ASP 2.0 Kako uhvatiti kod greske za obradu

[es] :: .NET :: ASP 2.0 Kako uhvatiti kod greske za obradu

[ Pregleda: 2533 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

oggie

Član broj: 126613
Poruke: 140
212.62.49.*



+1 Profil

icon ASP 2.0 Kako uhvatiti kod greske za obradu11.12.2006. u 09:46 - pre 210 meseci
Kako u ASP 2.0 VB kodu da uhvatim kod greske da bi je handlovao. Na primer ako ubacujem dupli kljuc u tabelu meni se pojavi poruka "Cannot insert duplicate key in object" u delu koda x.message

Catch x As Exception

Trace.Write("Greska: " & x.Message & " vreme: " & Date.Now)

E sad kako da uhvatim kod te greske i da kazem npr:

Case xxxx:

poruka: Ne mozete uneti dupli kljuc.
 
Odgovor na temu

oggie

Član broj: 126613
Poruke: 140
212.62.49.*



+1 Profil

icon Re: ASP 2.0 Kako uhvatiti kod greske za obradu13.12.2006. u 14:45 - pre 210 meseci
Da li je moguce da nema odgovora na ovo pitanje. Evo da malo pojasnim, voleo bih da koristim kod nalik onom u VB 6:

Err:
Select Case Err.Number

Case -2147467259, 17:
MsgBox "Ne postoji konekcija sa bazom"
Case 2627, 3621:
MsgBox "Polje ima jedinstvenu vrednost, ne mozete uneti dva puta istu vrednost."
Case Else
MsgBox (Err.Source & vbCrLf & Err.Description & vbCrLf & Err.Number)
End Select

Da li u ASP 2.0 postoji nesto tipa Err.Number umesto Err.Message?
 
Odgovor na temu

bunker
Srđan Savković
Smederevo

Član broj: 4495
Poruke: 239
212.5.210.*



Profil

icon Re: ASP 2.0 Kako uhvatiti kod greske za obradu14.12.2006. u 07:53 - pre 210 meseci
Catch x As SqlException

select case x.Number....

znaci isto, samo je exception drugog tipa.
Nije važno stići prvi. Važno je prvo da stigneš.
 
Odgovor na temu

oggie

Član broj: 126613
Poruke: 140
212.62.49.*



+1 Profil

icon Re: ASP 2.0 Kako uhvatiti kod greske za obradu14.12.2006. u 08:01 - pre 210 meseci
Hvala na odgovoru, citao sam dosta o tim exception-ima i prilicno mi je to zbunjujuce.
Shvatam to za sqlexception, ali sta ako mi se pojavi na primer greska deljenje nulom, to nije sqlexpection.....
To znaci da treba da hvatam razlicite tipove exceptiona, a ne znam unapred koji ce se desiti.
Malo cudan pristup, VB6 je bio bolji jer ima jedan Error i sto god da se desi ja dobijem kod te greske i opis.

Hvala jos jednom.
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: ASP 2.0 Kako uhvatiti kod greske za obradu14.12.2006. u 08:21 - pre 210 meseci
Oggie koristi pretragu. Nedavno smo o tome vec diskutovali u ovoj temi http://www.elitesecurity.org/t228746-0#1371630
Inace pristup nije cudan. Pristup je, mislim, under the hood veoma slican, s tim sto je ovaj sa try & catch daleko bolji pristup. (ovo se odnosi pogotovo na ugnjezdene try & cath blokove, gde je po onom principu u VB6 bio to nightmare.)
 
Odgovor na temu

oggie

Član broj: 126613
Poruke: 140
212.62.49.*



+1 Profil

icon Re: ASP 2.0 Kako uhvatiti kod greske za obradu14.12.2006. u 10:25 - pre 210 meseci
Koristim ja pretragu ali sam pocetnik i jos uvek mi je mozak nastelovan na VB6 logiku....treba mi malo vremena da svarim sve ove novine.


Ono sto nisam uspeo da shvatim je sledece:

Imam jednu klasu Klasa1 koja ima funkciju Select koja izgleda otprilike ovako:

Public Function Select(ByVal Tabela As String) As DataTable

Select= Nothing
Try

Dim con As SqlConnection
Dim adapter As SqlDataAdapter
Dim dt As New DataTable
Dim konekcija As Konekcija = New Konekcija

con = konekcija.con_open()

Dim sql As String
sql = "SELECT * from " & Tabela

adapter = New SqlDataAdapter(sql, con)
adapter.Fill(dt)
adapter.Dispose()

Select= dt
con = konekcija.con_close

Catch x As SqlException
Trace.Write("Greska: " & x.Message & " vreme: " & Date.Now)
Debug.Write(x.Number)
End Try
End Function

Zatim imam webformu i na Page_Load treba da popunim gridview.

Page_Load

Try
If Not Page.IsPostBack Then
Dim k As Klasa1=New Klasa1
Dim dt as DataTable=New dataTable
dt = k.Select("TabelaX")
If dt.Rows.Count = 0 Then
gridview.DataSource = dt
gridview.DataBind()
end if

End If

Catch x As SqlException

Trace.Write("Greska: " & x.Message & " vreme: " & Date.Now)
Response.Write(x.Message)

End Try
end sub

Koji problem imam? Ako se greska desi u klasi, npr ne moze da nadje tu tabelu, on ode u Catch blok, prikaze gresku, ali se vrati u formu i nastavi rad. Na formi ce gresku prikazati tek u delu kad dodje do dt.rows.count jer je dt nothing.
E sad moja velika mora je kako da cim pukne u klasi da me odmah prebaci na gresku u formi, tj. da forma preuzme gresku iz klase.
Dalje, pokusao sam u klasi da napisem Response.Write ali ne radi u klasi.
Pokusao sam u klasi da napravim promenljivu Session.Add("Greska", 0) ali ovo ne radi u klasi.

Znaci kako iz klase prebaciti gresku na formu i odmah obustaviti rad cim greska nastane?
 
Odgovor na temu

oggie

Član broj: 126613
Poruke: 140
212.62.49.*



+1 Profil

icon Re: ASP 2.0 Kako uhvatiti kod greske za obradu14.12.2006. u 10:43 - pre 210 meseci
Jos sam zaboravio da dodam, kada u formi na Page_Load stavim break point na dt=k.Select("")....meni prilikom debugovanja kod ne prelazi u klasu sem ako i na klasi nisam stavio break point.
U VB6 mi je direktno iz forme prelazio u klasu kod debugovanja i gresku mi je iz klase prebacivao direktno u Err blok forme.

Da li se ovde radi o drugacijem pristupu u ASP.NET ili treba mozda nesto da se setuje. U VB6 je bilo ono setovanje u Tool Options:

Break on all errors
Break in Class Module
Break on Unhandles errors
 
Odgovor na temu

bunker
Srđan Savković
Smederevo

Član broj: 4495
Poruke: 239
212.5.210.*



Profil

icon Re: ASP 2.0 Kako uhvatiti kod greske za obradu14.12.2006. u 11:43 - pre 210 meseci
Code:

Public Function Select(ByVal Tabela As String) As DataTable

Select= Nothing
Try

Dim con As SqlConnection
Dim adapter As SqlDataAdapter
Dim dt As New DataTable
Dim konekcija As Konekcija = New Konekcija

con = konekcija.con_open()

Dim sql As String
sql = "SELECT * from " & Tabela

adapter = New SqlDataAdapter(sql, con)
adapter.Fill(dt)
adapter.Dispose()

Select= dt
con = konekcija.con_close

Catch x As SqlException
Trace.Write("Greska: " & x.Message & " vreme: " & Date.Now)
Debug.Write(x.Number)

'added by ssrdjan
Throw x      'Ovo cce izbaciti gresku u drugi catch block (onaj u formi)

'dodaj i ovo 
Catch xZero As DivisionByZeroException 'mislim da se ovako zove
Trace.Write("Greska: " & xZero.Message & " vreme: " & Date.Now)
Throw xZero

Catch xBase As Exception
Trace.Write("Greska: " & xBase.Message & " vreme: " & Date.Now)
Throw xBase 'Ovaj throw cce srusiti tvoju aplikaciju zato sto u try-catch forme ne hvatas Exception vecc samo SqlException

''ovo cce resiti tvoje probleme. I pazi na ovo, supercall exception mora biti ispod ostalih, jer ako 
''uhvatis Exception necces mocci da procesuiras ostale. 

End Try
End Function

Zatim imam webformu i na Page_Load treba da popunim gridview. 

Page_Load

Try
If Not Page.IsPostBack Then
Dim k As Klasa1=New Klasa1
Dim dt as DataTable=New dataTable
dt = k.Select("TabelaX")
If dt.Rows.Count = 0 Then
gridview.DataSource = dt
gridview.DataBind()
end if

End If

Catch x As SqlException

Trace.Write("Greska: " & x.Message & " vreme: " & Date.Now)
Response.Write(x.Message)

End Try



Za prelazak u kod klase, nije dovoljno da koristis next step u debugeru, vecc step into (F11). Ovo cce te prebaciti u kod klase. Znaci sa F10 mozes da preskocis ulazak u blok, a sa F11 forsiras ulazak.

Treniraj malo sa ovim Try-Catch, ne znam zasto si toliko zakasnio na to. Zaboravi VB6 kad predes na ovo. Narocito ti preporucujem da zaboravis one VB6 ruzne funkcije kao Left, Right Msg itd. Ovde se radi strogo po oop standardima.
string.PadLeft, string.PadRight...

Obrati paznju da jedan try blok moze imati vise catch-ova
Try
Catch
Catch
Catch
Finally
End Try
Nije važno stići prvi. Važno je prvo da stigneš.
 
Odgovor na temu

oggie

Član broj: 126613
Poruke: 140
212.62.49.*



+1 Profil

icon Re: ASP 2.0 Kako uhvatiti kod greske za obradu14.12.2006. u 11:55 - pre 210 meseci
Hvala puno za ovo F11, stvarno nigde nisam naisao na to (a da ne pricam kako jos uvek mahinalno pritiskam F8). Kako jedna sitnica puno znaci kad znas za foru.
Ali jos uvek nemam odgovor kako da gresku iz klase prebacim u gresku na formi automatski cim nastane, da ne ide dalje po kodu u formi. Znaci ako u klasi ne ostvari konekciju da odmah prijavi gresku.

Sto se tice tvojih saveta za .NET ja koristim VB jer ne znam C# mada vidim da se c# vise koristi. Vidim u C# kodu stalno MessageBox.Show pa se pitam jel to samo za c# ili postoji nesto i za VB ali ja ne znam?

Jos jednom puno hvala.
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: ASP 2.0 Kako uhvatiti kod greske za obradu14.12.2006. u 12:00 - pre 210 meseci
Oggie nemoj da se ljutis ali ovo sve spada u domen pocetnika. Za detalje najbolje je da otkucas u MSDN try-catch za VB i da procitas i posvetis malo vremena izucavanju VB.NET-a - jer je znacajno drukciji (a bice i vise u sledecim verzijama pojavom funkcijske paradigme).

Ali da ne bude da sam te samo redirectovao (znam koliko ljudi mrze kad im treba odgovor jos juce ), odgovoricu ukratko.

Citat:

Koji problem imam? Ako se greska desi u klasi, npr ne moze da nadje tu tabelu, on ode u Catch blok, prikaze gresku, ali se vrati u formu i nastavi rad. Na formi ce gresku prikazati tek u delu kad dodje do dt.rows.count jer je dt nothing.
E sad moja velika mora je kako da cim pukne u klasi da me odmah prebaci na gresku u formi, tj. da forma preuzme gresku iz klase.
Dalje, pokusao sam u klasi da napisem Response.Write ali ne radi u klasi.
Pokusao sam u klasi da napravim promenljivu Session.Add("Greska", 0) ali ovo ne radi u klasi.

Znaci kako iz klase prebaciti gresku na formu i odmah obustaviti rad cim greska nastane?


Ovaj primer sto si naveo, najbolje ilustruje upotrebu try & catch bloka. Kada se dogodi greska unutar odredjene funkcije - funkcija moze da ga uhvati i obradi ali onda dolazis do ovog tvog 'problema'. Ukoliko pozivana f-ja obradi exception, onda ce pozivni kod izgubiti tu informaciju (kao u tvom slucaju, kada se iz f-je vrati nothing zbog handlovanog exception-a unutar f-je). Zato je najbolje da izbacis nanovo gresku(throw) pa ce ti code puci kod poziva f-je. Cak sta vise, mogao bi da izostavis try & catch blok iz f-je, pa bi dobio isti efekat ali onda moras dobro znati sta radis jer neces imati mogucnosti da uradis clean-up.

Citat:

Jos sam zaboravio da dodam, kada u formi na Page_Load stavim break point na dt=k.Select("")....meni prilikom debugovanja kod ne prelazi u klasu sem ako i na klasi nisam stavio break point.
U VB6 mi je direktno iz forme prelazio u klasu kod debugovanja i gresku mi je iz klase prebacivao direktno u Err blok forme.

Da li se ovde radi o drugacijem pristupu u ASP.NET ili treba mozda nesto da se setuje. U VB6 je bilo ono setovanje u Tool Options:


To je do VS-a. Ne znam da li su iste kontrole za VB kao za C# okruzenje ali ako jesu - onda koristi F11 za Step into a F10 za Step Over.
 
Odgovor na temu

oggie

Član broj: 126613
Poruke: 140
212.62.49.*



+1 Profil

icon Re: ASP 2.0 Kako uhvatiti kod greske za obradu14.12.2006. u 12:17 - pre 210 meseci
Hvala na odgovoru, ne ljutim se i vise puta sam naglasio da sam pocetnik. Naravno da citam MSDN, forume i ostalo...ali imam i konkretan zadatak koji moram da uradim u kratkom vremenu, pa nemam bas vremena za ucenje, nego radim sve onako u hodu, kako mi naidje problem ja postujem pitanje, pa sam malo citam, trazim....pa nekako dodjem do resenja.
Hvala jos jednom svima na pomoci


p.s. Moram da priznam da mi nije najjasnije "Zato je najbolje da izbacis nanovo gresku(throw)" , gde da je izbacim ponovo i kako. Pokusacu da se iscupam iz ovoga.
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: ASP 2.0 Kako uhvatiti kod greske za obradu14.12.2006. u 12:17 - pre 210 meseci
Citat:
oggie:
Sto se tice tvojih saveta za .NET ja koristim VB jer ne znam C# mada vidim da se c# vise koristi. Vidim u C# kodu stalno MessageBox.Show pa se pitam jel to samo za c# ili postoji nesto i za VB ali ja ne znam?


Postoji i za VB. Mada se koristi i dalje MsgBox - za koji pretpostavljam da je ostavljen radi kompatibilnosti kao i ceo Microsoft.VisualBasic assembly.
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: ASP 2.0 Kako uhvatiti kod greske za obradu14.12.2006. u 12:22 - pre 210 meseci
Bas si brz

Vec ti je bunker napisao code.

Code:


Try
  .... neki code

Catch x As SqlException
   Throw x     
End Catch
 
Odgovor na temu

oggie

Član broj: 126613
Poruke: 140
212.62.49.*



+1 Profil

icon Re: ASP 2.0 Kako uhvatiti kod greske za obradu14.12.2006. u 12:28 - pre 210 meseci
Hvala, hvala, hvala......puuunoooo.

Hiljadu MSDN-ova ne moze da zameni ovakvu pomoc u pravom trenutku.
Znaci ono sto sam trazio je samo jedna jedina rec Throw x, u sve svoje funkcije u klasi sam stavio ovo i sad mi na formi puca cim naidje na gresku u klasi.

Kad znas onda je sve lako, a kad ne znas mozes dane i dane da izgubis zbog neke sitnice.


p.s. Sto se tice MessageBox u VB on ne radi, puca mi....a stari msgbox radi ali to je valjda na serverskoj strani poruka ne na klijentu.
 
Odgovor na temu

oggie

Član broj: 126613
Poruke: 140
212.62.49.*



+1 Profil

icon Re: ASP 2.0 Kako uhvatiti kod greske za obradu14.12.2006. u 12:39 - pre 210 meseci
Dugujem jedno izvinjenje Bunkeru, uopste nisam primetio njegov kod u okviru mog. Ja sam mislio da je samo citirao moj kod i citao sam samo odgovor ispod citata. Tek sad sam primetio da je dodavao kod u okviru citata.
Hvala i izvinjavam se na propustu, u zurbi sam pa mi je promaklo.
 
Odgovor na temu

bunker
Srđan Savković
Smederevo

Član broj: 4495
Poruke: 239
212.5.210.*



Profil

icon Re: ASP 2.0 Kako uhvatiti kod greske za obradu14.12.2006. u 14:02 - pre 210 meseci
Nema problema. Samo citaj pazljivo...
Nije važno stići prvi. Važno je prvo da stigneš.
 
Odgovor na temu

[es] :: .NET :: ASP 2.0 Kako uhvatiti kod greske za obradu

[ Pregleda: 2533 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.