抛出异常难度

问题描述 投票:1回答:2

我正在捕获异常并进行处理。在调用树的某个地方,我正在做同样的事情。一旦我在子级处理了异常,就想继续调用异常处理程序,无论它在哪里,都在调用树的某个位置。

为此,我以为我会再次投掷。但是,它不是在调用树的某个位置上进行分解,而是在我正在执行抛出并崩溃的地方在此行上进行分解:

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();
    }

}
c# exception try-catch
2个回答
0
投票

[尝试仅使用throw关键字,而不要建立新的异常。

https://stackoverflow.com/a/2999314/5145250


0
投票

要向异常中添加其他信息,请在另一个异常对象中扭曲它,然后将原始异常作为参数与新消息一起传递,以将原始堆栈跟踪保留在内部异常中。

throw new Exception("Cannot Write Header Row to Database " + Msg,  e);
© www.soinside.com 2019 - 2024. All rights reserved.