我有以下代码:
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>
答案 0 :(得分:2)
GetLastAddedIDHelper
和GetLastAddedID
中的异常处理在这种情况下不起作用。看起来,你的意图是简单地捕获异常然后对它做任何事情,除非重新抛出它。如果是这样的话,为什么还要费心去捕捉它呢?只需让异常传播到堆栈中,直到可以处理它的异常处理程序获得它,在这种情况下使用Button_Click_Action
方法。
在此示例中,您的异常处理实际上是有害的,因为throw ex
会使您的堆栈跟踪陷入困境。您想要使用throw
。
答案 1 :(得分:0)
您可能希望执行throw;
,因为throw ex;
将重置堆栈跟踪。