Avatar billede alex_sleiborg Nybegynder
12. december 2007 - 13:21 Der er 13 kommentarer og
1 løsning

Exception på DataGateway klasse

Hej. Jeg har en DataGateway klasse, som tager sig af alle db forespørgsler. Nogle klasser returnere dataset, string og andre. Men hvad nu, hvis det kommer en exception, hvordan får jeg så den exception meddelses til at reagere på min GUI? Skal jeg lave en properties der kan håndtere det.

Evt. hvis metoden laver en exception, så smider exception i en properties string. Der hvor man kalder metode fra lave man en noget ala
if(DataGateWay.GetDataSet == null)
    MessageBox.Show(DataGateWay.Exception);

Vil det være den optimale løsning?
Avatar billede arne_v Ekspert
12. december 2007 - 15:15 #1
Hvorfor ikke rethrowe en DataGatewayException og lade GUI kode catche den ?
Avatar billede alex_sleiborg Nybegynder
12. december 2007 - 21:26 #2
Vil du give et eksempel på det?
Avatar billede arne_v Ekspert
17. december 2007 - 04:39 #3
}
catch(SqlException ex)
{
    // log
    throw new DataGatewayException("noget der fortaeller lidt om fejlen hentet fra ex");
}
Avatar billede alex_sleiborg Nybegynder
18. december 2007 - 14:44 #4
Jeg forstår ikke lige hvordan det skal implementeres? Her er min klasse

            try
            {
                da.SelectCommand = cmd;
                da.Fill(ds, table);
            }
            catch(MySqlException ex)
            {

            }

Men det bliver jo kaldt fra en helt anden klasse, og den MySqlException, vil jeg gerne have vist i label
Avatar billede arne_v Ekspert
19. december 2007 - 02:46 #5
try
            {
                da.SelectCommand = cmd;
                da.Fill(ds, table);
            }
            catch(MySqlException ex)
            {
                throw new DataGatewayException(ex.Message);
            }
Avatar billede arne_v Ekspert
19. december 2007 - 02:47 #6
Finessen er at den dag du skifter til SQLServer, PostgreSQL eller Oracle, så
catcher du en anden exception men smider stadig en DataGatewayException således at
din GUI ved hvad den skal catche uden at kende databasen.
Avatar billede alex_sleiborg Nybegynder
19. december 2007 - 12:22 #7
Det forstår jeg ikke helt. Jeg har jo ikke noget der hedder DataGatewayException?
Avatar billede arne_v Ekspert
19. december 2007 - 15:24 #8
Du laver en saadan klasse !
Avatar billede alex_sleiborg Nybegynder
19. december 2007 - 15:32 #9
Okay, men så bliver den klasse jo også nød til at indeholde en string property. Som kan indeholde den ex.Message?
Avatar billede arne_v Ekspert
19. december 2007 - 15:41 #10
Den arver fra Exception og kan saette message via parent constructor.
Avatar billede alex_sleiborg Nybegynder
19. december 2007 - 15:48 #11
Okay, jeg prøver og se om jeg kan få det til at virke. Har lidt en ide om, hvordan det skal se ud nu. Men det kan godt være du skal lave et eksempel, men prøver lige og se om jeg ikke selv kan klare det først. Smid et svar Arne, og mange tak endnu en gang
Avatar billede arne_v Ekspert
19. december 2007 - 16:08 #12
svar
Avatar billede alex_sleiborg Nybegynder
10. januar 2008 - 05:12 #13
Har umiddelbart svært ved at implementere det... Gider du lave et eksempel Arne?

public class DataGatewayException
{
    private string _errorMessage = null;
    public DataGatewayException(string ErrorMessage)
    {
        _errorMessage = ErrorMessage;
    }
    public string ErrorMessage
    {
        get
        {
            return _errorMessage;
        }
        set
        {
            if (_errorMessage != value)
            {
                _errorMessage = value;
            }
        }
    }
}

Skal det være en exception i stedet for string?
Avatar billede arne_v Ekspert
03. februar 2008 - 05:32 #14
public class DataGatewayException: Exception
{
  public DataGatewayException()
  {
  }
  public DataGatewayException(string message) : base(message)
  {
  }
}
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