【发布时间】:2019-12-10 19:22:31
【问题描述】:
我正在捕获异常并对其进行处理。 在调用树的某个地方,我也在做同样的事情。 一旦我在子级别处理我的异常,我还想继续调用异常处理程序,无论它在哪里,在调用树的某个位置。
为此,我想我会再次投掷。 但是,它不是在调用树的某个地方中断,而是在我进行投掷和崩溃的地方中断,在这一行:
throw new Exception("Cannot Write Header Row to Database " + Msg);
代码:
public static void NewHeaderRow(string FILE_REV_NUMBER, DateTime FILE_CREATE_DATE, string EDC_DUNS_NUMBER, int RunId)
{
SqlConnection connection = null;
try
{
connection = new SqlConnection(ConfigurationManager.ConnectionStrings["DbConn"].ToString());
connection.Open();
SqlCommand com;
com = new SqlCommand("dbo.INSERT_PPL_HEADER", connection);
com.CommandType = CommandType.StoredProcedure;
com.Parameters.Add(new SqlParameter("@FILE_REV_NUMBER", FILE_REV_NUMBER));
com.Parameters.Add(new SqlParameter("@FILE_CREATE_DATE", FILE_CREATE_DATE));
com.Parameters.Add(new SqlParameter("@EDC_DUNS_NUMBER", EDC_DUNS_NUMBER));
com.Parameters.Add(new SqlParameter("@RunId", RunId));
if (com.Connection.State == ConnectionState.Closed) com.Connection.Open();
com.ExecuteNonQuery();
}
catch (Exception e)
{
string Msg;
Msg = "Encountered unexpected program issue. Please contact your program administator. Error details...";
Msg = Msg + System.Environment.NewLine;
Msg = Msg + System.Environment.NewLine;
Msg = Msg + e.ToString();
Msg = Msg + System.Environment.NewLine;
Msg = Msg + System.Environment.NewLine;
Msg = Msg + e.Message;
throw new Exception("Cannot Write Header Row to Database " + Msg);
}
finally
{
if (connection == null) { } else connection.Close();
}
}
【问题讨论】:
-
基于该链接,我似乎做得对,但它不起作用....处理程序是否必须在调用此方法的方法中,或者它可以是几个在调用堆栈上指向上方?
-
@kammistry,错误会“向上”传播——当它们被抛出时,它们会一直向上调用堆栈,直到它们被处理或程序崩溃。该处理程序可以是调用堆栈中最初引发错误的方法“之上”的几个方法。