Hej. Håller på att skriva business layers för en applikation i ASP.NET. Min fråga är hur man skall kunna fånga exceptions utanför klassen. Alltså klassen kastar t.ex. sqlexception och sen skall man kunna fånga det i applikationen som använder sig av klassen. Ex: Hej och tack för ditt svar. Jag lyckades inte fånga upp ett exception i min webform men gjorde på följande sätt och det lyckades. Nu är jag inte hundra men jag tror du får göra så för att fånga felet. Om du fångar felet i din klass och även vill fånga det i din klient så får du kasta felet igen från din catch i klassen. Ganske bra om man vill lägga till lite info om felet - tex vilken klass och vilken funktion det kommer ifrån.Klass fråga...
<code>
Public class AClass
Public function getSomData() as sqldatareader
dim conn...
dim cmd as ....
try
'utför databas kod....
catch ex as sqlexception
'vet inte hur man skall skriva här för att kasta ett sqlexception men typ
Throw new sqlexception("Något sket sig")
end try
end function
End Class
</code>
Sedan kunde man använda klassen i sin applikation enligt följande:
<code>
dim test as new AClass()
dim dr as slqdatareader
try
dr = test.getSomeData()
catch ex as sqlexception
label1.text = ex.toString()
end try
</code>
Denna kod som jag skrivit fungerar int men skulle vilja att det skulle fungera ungefär så, lite som i Java skulle jag vilja ha det där man säger att en funktion kastar t.ex. exception...
mvh PhilipSv: Klass fråga...
Hej.
Testa att kasta ett System.Exception och kolla om det fungerar.
Ex:
Throw new system.Exception("Något sket sig")
Fånga:
Catch ex as Sytem.Exection()
Då vet du att alla fel kastas... om det nu inte är något sqlexeption.
//freddaSv: Klass fråga...
Skapar en klass utan try/catch
<code>
Public class someClass
public function getSomeData() as Datareader
'returnera data med databaskoppling dock utan felhantering
end function
end class
</code>
Sedan använde man sig av klassen enligt följande:
<code>
dim test as new someClass()
dim dr as sqldatareader
try
dr = test.getSomeData()
catch ex as mysqlexception
label1.text = "Något sket sig..."
end try
</code>
Denna kod fungerar men jag vet inte om det är rätt tänkt eller om man borde lösa det på något annat sätt.
mvh PhilipSv: Klass fråga...
om du gör det i din klass så fångar du felet redan där och kastar alltså inte det tillbaka upp till din web-form.
Om du vill ha try-catch i din klass så tror jag du måste kasta ett nytt fel i din catch-sats i klassen upp mot din web-form som då kan ta emot den om du har en try-catch sats där med...
Men som sagt jag är inte hundra då jag inte titta så mycket på felhantering i .NET.
- MagnusSv: Klass fråga...
/peterbladh