Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C#] Aiuto su gestione eccezioni

    ho alcune perplessità su come gestire al meglio le eccezioni.
    vi faccio un esempio:
    codice:
            protected void insertFile(object sender, EventArgs e)
            {
                filePath = "C:\\Documents and Settings\\Administrator\\Desktop\\Upload\\";
                string ext = System.Configuration.ConfigurationManager.AppSettings["videoExt"];
                string[] arr = ext.Split(' ');
                string extUpload;
                if (FileUpload1.HasFile)
                {
                    filePath += FileUpload1.FileName;
                    name = FileUpload1.FileName;
                    extUpload = name.Substring(name.LastIndexOf('.') + 1);
                    if (File.Exists(filePath))
                    {
                        lblMessage.Text = "Il file già esiste";
                    }
                    else
                    {
                        foreach (string estensioni in arr)
                        {
                            if (extUpload == estensioni)
                            {
                                try
                                {
                                    //salva localmente
                                    FileUpload1.SaveAs(filePath);
                                    //calcola durata
                                    Microsoft.DirectX.AudioVideoPlayback.Video video = new Microsoft.DirectX.AudioVideoPlayback.Video(filePath);
                                    durata = Convert.ToDecimal(video.Duration);
                                    //video.
                                    lblMessage.Text = " ";
                                    //query SP
                                    insertData();
                                    //invio ftp
                                    sendFile();
                                    //cancella file locale
                                    localDelete();
                                    break;
                                }
                                catch (Exception ex)
                                {
                                    lblMessage.Text = ex.Message;
                                }
                            }
                            else
                            {
                                lblMessage.Text = "Estensione non supportata";
                            }
                        }
                    }
                }
                else
                {
                    lblMessage.Text = "File non caricato";
                }
            }
    questo metodo a un certo punto ne richiama altri; questi altri metodi hanno anch'essi dei blocchi try/catch.
    ad esempio:
    codice:
            protected void insertData()
            {
                string eraser = "0";
                SqlCommand cmd = new SqlCommand("TNW_insert_spot", conn);
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Parameters.Add("@nome_file_spot", SqlDbType.VarChar).Value = name;
                cmd.Parameters.Add("@descrizione", SqlDbType.VarChar).Value = descrizione.Text;
                cmd.Parameters.Add("@eraser", SqlDbType.Int).Value = Convert.ToInt32(eraser);
                cmd.Parameters.Add("@tipo_spot#", SqlDbType.Int).Value = Convert.ToInt32(ddlTipoSpot.SelectedValue);
                cmd.Parameters.Add("@durata_spot", SqlDbType.Decimal).Value = durata;
                try
                {
                    conn.Open();
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    lblMessage.Text = ex.Message;
                    //throw new Exception(ex.Message);
                }
                finally
                {
                    conn.Close();
                }
            }
    in sostanza è come se avessi creato un try nidificato.
    come posso gestire al meglio queste situazioni??

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da fermat
    ho alcune perplessità su come gestire al meglio le eccezioni.
    vi faccio un esempio:
    [...]
    in sostanza è come se avessi creato un try nidificato.
    come posso gestire al meglio queste situazioni??
    Dipende da cosa vuoi ottenere o qual è l'obiettivo che ti prefiggi.

    Da come hai illustrato la tua situazione, per evitare di ignorare eccezioni sarebbe sufficiente inserire la gestione dell'errore con try...catch solo nel metodo che risponde all'evento associato a un elemento dell'interfaccia grafica.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    ok ma quello che nn ho capito è: mi basta levare il sotto try/catch?
    perchè ad esempio in java faccio una cosa del genere:
    codice:
    public void select() throws ClassNotFoundException, SQLException, IOException {
            ArrayList<String> list = null;
            conn = DBManager.getInstance().takeConnection();
            CallableStatement cstmt = conn.prepareCall("{ CALL getBook() }");
            ResultSet rs = cstmt.executeQuery();
            while (rs.next()) {
                list = new ArrayList<String>();
                list.add(String.valueOf(rs.getInt("book_id")));
                list.add(rs.getString("title"));
                list.add(rs.getString("author_name"));
                list.add(rs.getString("editor_name"));
                list.add(String.valueOf(rs.getDouble("price")));
                list.add(rs.getString("isbn"));
                list.add(rs.getString("note"));
                ((DefaultTableModel) FormMain.getTable().getModel()).addRow(list.toArray());
            }
            cstmt.close();
        }
    e poi nella parte grafica piazzo i try/catch.
    ma in c# questo nn si può fare se nn sbaglio.

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da fermat
    ok ma quello che nn ho capito è: mi basta levare il sotto try/catch?
    Hai provato per vedere cosa succede?

    Originariamente inviato da fermat
    perchè ad esempio in java faccio una cosa del genere:
    [...]
    e poi nella parte grafica piazzo i try/catch.
    ma in c# questo nn si può fare se nn sbaglio.
    In questo frangente, non vedo differenze: quello che puoi fare nell'uno vale anche nell'altro, e vale anche in altri linguaggi (es. Delphi).
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    a dire il vero ancora non ho fatto tutte le prove possibili.
    cmq tu dici che posso modificare il metodo richiamato in questo medo:
    codice:
            protected void insertData()
            {
                string eraser = "0";
                SqlCommand cmd = new SqlCommand("TNW_insert_spot", conn);
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Parameters.Add("@nome_file_spot", SqlDbType.VarChar).Value = name;
                cmd.Parameters.Add("@descrizione", SqlDbType.VarChar).Value = descrizione.Text;
                cmd.Parameters.Add("@eraser", SqlDbType.Int).Value = Convert.ToInt32(eraser);
                cmd.Parameters.Add("@tipo_spot#", SqlDbType.Int).Value = Convert.ToInt32(ddlTipoSpot.SelectedValue);
                cmd.Parameters.Add("@durata_spot", SqlDbType.Decimal).Value = durata;
                //try
                //{
                    conn.Open();
                    cmd.ExecuteNonQuery();
                    throw new Exception();
                //}
                //catch (Exception ex)
                //{
                //    lblMessage.Text = ex.Message;
                //    //throw new Exception(ex.Message);
                //}
                //finally
                //{
                    //conn.Close();
                //}
            }
    e poi richiamare le eccezioni dentro al catch della parte grafica?
    (ho preso l'eccezione generica come esempio).

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da fermat
    cmq tu dici che posso modificare il metodo richiamato in questo medo:
    [...]
    e poi richiamare le eccezioni dentro al catch della parte grafica?
    Sì, è esattamente ciò che volevo dire con
    "per evitare di ignorare eccezioni sarebbe sufficiente inserire la gestione dell'errore con try...catch solo nel metodo che risponde all'evento associato a un elemento dell'interfaccia grafica"
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    ok grazie mille per le delucidazioni!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.