Avatar billede donpedrodelavega Nybegynder
29. september 2002 - 15:56 Der er 6 kommentarer og
1 løsning

TIlbage med exceptionen

Hvordan smider jeg en exception tilbage til den kaldende metode ?

e.g. i Java hvor man afslutter metode signaturen med at skrive "throws ExceptionNavn"...

/ DonPedro
Avatar billede nielslbeck Nybegynder
29. september 2002 - 16:15 #1
Så vidt jeg har forstået det, behøver du ikke angive, at der kan blive kastet en exception fra metoden. Så du kaster bare en exception...

public class ThrowTest {

    public static string KastException(string s) {
        if (s == null)
            throw(new ArgumentNullException());

        return s;
    }
   
    public static void Main() {
        try {
            Console.Write(KastException(null));
        }
        catch (Exception e) {
            Console.WriteLine(e.ToString());
        }
    }
}
Avatar billede donpedrodelavega Nybegynder
29. september 2002 - 16:27 #2
Det fungerer jo også fint i nogle situationer, men:

De fejl jeg skal fange er af typen "SqlClient.SqlException" og jeg kan derfor ikke spørge på en tilstand før eller efter.
Problemet er at hvis jeg bruger try-catch skal Readeren instantieres udenfor blocken og så mister jeg min Cmd.ExecuteReader retur-værdi.

public static SqlDataReader getReader(string SQL)
{
    SqlConnection Conn    = new SqlConnection(ConnStr);
    SqlCommand Cmd        = new SqlCommand(SQL, Conn);

    SqlDataReader Reader;

    Conn.Open();
    Reader = Cmd.ExecuteReader();

    return Reader;
}

PS. Jeg husker selvfølgelig at lukke min Reader i min kaldende metode.

/ DonPedro
Avatar billede nielslbeck Nybegynder
29. september 2002 - 17:03 #3
Hmm... kender desværre ikke noget i C# som minder om throws i Java - beklager :-(
Avatar billede kichian Nybegynder
29. september 2002 - 18:37 #4
Det fungerer jo også fint i nogle situationer, men:

De fejl jeg skal fange er af typen "SqlClient.SqlException" og jeg kan derfor ikke spørge på en tilstand før eller efter.
Problemet er at hvis jeg bruger try-catch skal Readeren instantieres udenfor blocken og så mister jeg min Cmd.ExecuteReader retur-værdi.

public static SqlDataReader getReader(string SQL)
{
    SqlDataReader Reader = null; // Så er den initieret :-)
try {
    SqlConnection Conn    = new SqlConnection(ConnStr);
    SqlCommand Cmd        = new SqlCommand(SQL, Conn);
    Conn.Open();
    Reader = Cmd.ExecuteReader();
} catch (Exception e) {
  // noget fejlhåndtering
}
    return Reader;
}
Avatar billede kichian Nybegynder
29. september 2002 - 18:38 #5
Ups.. Principielt burde return Reader være i en Finaly-struktur.
Avatar billede donpedrodelavega Nybegynder
29. september 2002 - 18:41 #6
kichian >>
Igen slår du til... :-D
30 velfortjente pts. coming your way...

/ DonPedro
Avatar billede donpedrodelavega Nybegynder
29. september 2002 - 18:43 #7
det er klart at return sætningen ligger som finally, men tak fordi du pointerede det ud... :-)

/ DonPedro
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