自定义异常并抛出c#

自定义异常并抛出c#,c#,exception,try-catch,C#,Exception,Try Catch,我有以下代码: public DataTable executeQuery(string querySql, List<MySqlParameter> parameters) { try { using (connectionLocal = getConnection()) { connectionLocal.Open();

我有以下代码:

    public DataTable executeQuery(string querySql, List<MySqlParameter> parameters)
    {
        try
        {
            using (connectionLocal = getConnection())
            {
                connectionLocal.Open();
                MySqlCommand command = new MySqlCommand(querySql, connectionLocal);
                command.CommandType = System.Data.CommandType.Text;

                foreach (MySqlParameter param in parameters)
                {
                    command.Parameters.Add(param);
                }

                MySqlDataAdapter dataAdapter = new MySqlDataAdapter(command);
                DataTable dataTable = new DataTable();
                dataAdapter.Fill(dataTable);
                dataTable.TableName = "tabla";
                return dataTable;
            }
        }
        catch (Exception e)
        {
            throw new DAOException("tst",e);
            //return null;
        }
    }
但发生异常时,会出现以下情况:

我想知道什么是正确的方式使用尝试捕捉扔


谢谢你

在catch块中,您捕获先前抛出的异常,然后抛出一个新的DAOException,您不在任何地方处理它


您到底想做什么?

如果您只想记录错误消息或将其显示给用户,您可以修改catch block by MessageBox调用:

catch (Exception e)
{
    MessageBox.Show("Ocurrio un problema... Por favor contacta al administrador!");
    return null; // or Application.Exit(); or other code you want
}
有一个关于抛出设计和缓存的异常。请记住,引发异常后,内存中的数据和当前上下文可能会损坏。然后您必须处理此场景或终止应用程序

有很多关于这个主题的材料,它实际上更像是一个答案。例如,最好至少向用户显示异常消息,或将异常详细信息记录到日志文件中,以便将来进行调试

处理异常的位置是
catch
块,而不是异常类本身。因此,您可以在catch块中显示MessageBox并终止应用程序(例如,通过
application.Exit()

异常
类只不过是一个数据容器,它可以获取有关所发生错误的信息。通过抛出异常,您可以说“我不能处理这种情况,其他人(调用方)应该处理它!”并且您可以使用
异常
类提供有关发生了什么以及发生在哪里的信息

能够(或想要)处理此异常的代码实现了
try….catch
块。它捕获异常,并(例如)记录信息,如
Message
StackTrace


如果任何人都没有捕获到异常,它最终将使整个应用程序崩溃,操作系统将通过创建转储等来处理。

inspect
e.Message
e.InnerException
@Shyju Where?在DAOException?中,我想显示一条错误消息并停止程序执行。我怎么能在DAOException类中尝试这个呢?我个人认为你并不需要自己的异常类,在catch块中,你只需要显示一个MessageBox并退出你的程序。当然,您也可以使用自己的异常类来执行此操作,然后您需要处理抛出的CustomException,以便能够显示您自己的MessageBox,而不是.NET的MessageBox。(发生未处理的异常后,.NET将显示一条错误消息,您无法控制该消息,因此您还需要处理CustomException。)谢谢您的回答。如何处理DAOException类中的异常以避免未处理的异常?您不应该处理异常本身,因为它没有任何意义。当您的代码可能导致“自定义”错误时,需要自定义异常,在.NET框架中没有异常,而不是当您想要处理一个已被.NET阻止的异常时(如与MySql相关的异常)。在您的情况下,您只需要在catch块中处理抛出的异常,例如显示MessageBox并关闭应用程序。不需要自定义异常。
catch (Exception e)
{
    MessageBox.Show("Ocurrio un problema... Por favor contacta al administrador!");
    return null; // or Application.Exit(); or other code you want
}