多次抛出异常

时间:2015-04-11 21:34:46

标签: c# exception-handling

我有以下代码:

    static int GetLastAddedIDHelper(OleDbConnection connection)
    {
        try
        {
            // Init variables.
            OleDbCommand command = null;
            string cmdText = "SELECT @@IDENTITY";

            if (connection != null)
                command = new OleDbCommand(cmdText, connection);
            else
                throw new ArgumentNullException("connection", "The connection was passed as null. Therefore the globally used connection is used but was never set.");

            return (int)command.ExecuteScalar();
        }
        catch (Exception ex) { throw ex; }
    }

    public static int GetLastAddedID()
    {
        try
        {
            return GetLastAddedIDHelper(_Connection);
        }
        catch (Exception ex) { throw ex; }
    }

    private void Button_Click_Action()
    {
        try
        {
            int i = AccessDbServiceBase.GetLastAddedID();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ExceptionHandler.GetExceptionMessage(ex));
        }
    }

上面的代码将为我从Access数据库中获取最后一个插入的ID。现在,要执行此操作,Button_Click_Action会致电GetLastAddedID,然后致电GetLastAddedIDHelper。当exception中出现GetLastAddedIDHelper时,我会将异常抛到主方法Button_Click_Action

我想知道我是否按照正确的方式做到这一点,如果我需要使用GetLastAddedID而不是throw,是否需要throw ex,...?< / p>

2 个答案:

答案 0 :(得分:2)

GetLastAddedIDHelperGetLastAddedID中的异常处理在这种情况下不起作用。看起来,你的意图是简单地捕获异常然后对它做任何事情,除非重新抛出它。如果是这样的话,为什么还要费心去捕捉它呢?只需让异常传播到堆栈中,直到可以处理它的异常处理程序获得它,在这种情况下使用Button_Click_Action方法。

在此示例中,您的异常处理实际上是有害的,因为throw ex会使您的堆栈跟踪陷入困境。您想要使用throw

答案 1 :(得分:0)

您可能希望执行throw;,因为throw ex;将重置堆栈跟踪。