Avatar billede spottie Nybegynder
24. maj 2006 - 08:48 Der er 16 kommentarer og
1 løsning

Vedr. throw exceptions?

Goddag eksperter

Jeg har følgende kode i mit program:

//conn string

MySqlConnection dbconn = new MySqlConnection(conn);
sqlcommand.Connection = dbconn;
dbconn.Open();

Her vil jeg gerne have en exception med throw sådan man får en fejl meddelse hvis ikke man kan forbinde, men skal være en throw så kan jeg selv skrive fejlen og ikke bare en try catch funktion?

Håber at høre fra nogen.

Vh spottie
Avatar billede tdafoobar Nybegynder
24. maj 2006 - 08:50 #1
throw new Exception("fejlmeddelse");

Hvis du altså bruger normale exceptions, du bør dog lave din egen exception class.
Avatar billede spif2001 Nybegynder
24. maj 2006 - 08:50 #2
try
{
MySqlConnection dbconn = new MySqlConnection(conn);
sqlcommand.Connection = dbconn;
dbconn.Open();
}
catch(Exception ex)
{
throw new Exception("DinBeskrivelse",ex);
}
Avatar billede tdafoobar Nybegynder
24. maj 2006 - 08:51 #3
Og i dit tilfælde skal du nok rekaste exceptionen ;)
Avatar billede tdafoobar Nybegynder
24. maj 2006 - 08:52 #4
*pokes spif2001* ja, man kunne også bare skrive koden :p
Avatar billede spif2001 Nybegynder
24. maj 2006 - 08:53 #5
ja da :)
Avatar billede spottie Nybegynder
24. maj 2006 - 09:27 #6
tak hvad menes med at jeg skal lave min egen exception class? Hvordan ser det ud i kode? altså det at lave sin egen exceptionsclass...
Avatar billede tdafoobar Nybegynder
24. maj 2006 - 09:29 #7
class MyException : Exception
{
public MyException(string str)
{
  Console.WriteLine ("User Defined Exception");
}
}
Avatar billede tdafoobar Nybegynder
24. maj 2006 - 09:30 #8
Avatar billede nielle Nybegynder
24. maj 2006 - 10:50 #9
Bliver der ikke allerede helt automatisk smidt en exception hvis du ikke akn forbinde til databasen?

Og ligeledes hvis du forsøger med noget ulovligt SQL - som f.eks. at SELECT'e fra en ikke eksisterende tabel.
Avatar billede nielle Nybegynder
24. maj 2006 - 10:53 #10
Mht. koden i 24/05-2006 08:50:58, så er den ikke helt efter bogen: Man kan godt catche på det alt-omfattende "Exception", men man bør nu hellere prøve at catche på den exception-type man forventer at få. På den måde får man ikke "skjult" fejl-tilstande som man bestemt ikke havde forventet ville kunne opstå.
Avatar billede spif2001 Nybegynder
24. maj 2006 - 10:57 #11
Jo jo - men mon ikke han selv vil lave det?

Jeg kan jo ikke sidde her og komme på alle de exception typer der er, og derefter håndtere dem...
Avatar billede arne_v Ekspert
24. maj 2006 - 11:46 #12
vi kan vel gætte på at det er en MySqlException
Avatar billede spottie Nybegynder
24. maj 2006 - 13:54 #13
Er forvirret...

Hvad er det I snakker om jeg selv vil lave og hvordan?

Håber nogen kan hjælpe og fortælle om det og hvordan?

spottie
Avatar billede arne_v Ekspert
24. maj 2006 - 19:01 #14
det hele skal kombineres lidt

try
{
  // MySql kald
}
catch (MySqlException e)
{
  throw new SpottieException("Din tekst");
}
Avatar billede spottie Nybegynder
24. maj 2006 - 21:19 #15
arne_v... Oki, men hvordan laver man sin egen klasse med exceptions?

Kan man lave sin egen klasse med exceptions således man selv definere hvad der skal stå ved en catch message i stedet for at bruge throw? hvis ja, hvordan eksempel ville være dejligt?

spottie
Avatar billede arne_v Ekspert
24. maj 2006 - 21:26 #16
du fik et eksempel 24/05-2006 09:29:49 men jeg kan nu ikke lide den Console.WriteLine

ellers check:

http://software.gurock.com/articles/creating-custom-exceptions-in-dotnet/
http://www.informit.com/articles/article.asp?p=101722&seqNum=4&rl=1
Avatar billede md_craig Nybegynder
26. maj 2006 - 23:03 #17
Hvis du helt specifikt er interesseret i de fejl der vedrører at du ikke kan connecte mm. så skal du dykke lidt dybere ned i den MySqlException du får, her er et eksempel:

__MySqlConnectException.cs___________________________________
using System;
using MySql.Data.MySqlClient;

namespace MySQLCon
{
  public class MySqlConnectException : Exception
  {
    public MySqlConnectException(string msg, MySqlException ex)
      : base(msg, ex)
    {   
    }
  }
}
-------------------------------------------------------------

__MySqlUnknownException.cs___________________________________
using System;
using MySql.Data.MySqlClient;

namespace MySQLCon
{
  public class MySqlUnknownException : Exception
  {
    public MySqlUnknownException(msg, MySqlException ex)
      : base(msg, ex)
    {   
    }
  }
}
-------------------------------------------------------------

__Din_TryCatch:______________________________________________
try
  {
  //...
  }
  catch (MySqlException ex)
  {
  if (ex.Number == 2003)
  {
    throw new MySqlConnectException("Din Besked", ex);
  }
  else if (ex.Number == 2000)
  {
    throw new MySqlUnknownException("Din Besked", ex);
  }
  //Osv der ned af
}
-------------------------------------------------------------

Og sådan kunne du ellers lave Exception klasser i vildskab, og så kan man så spørge om relevansen der af, men det er jo vist det du vil....
2003 er ikke den eneste fejlkode der er connection relateret... der kan findes en liste over server og klient fejlkoder her:

http://dev.mysql.com/doc/refman/5.0/en/error-messages-server.html
http://dev.mysql.com/doc/refman/5.0/en/error-messages-client.html

Håber det kan bruges ^^
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