【问题标题】:Where was call made so I can manage exception?在哪里打电话所以我可以管理异常?
【发布时间】:2019-02-12 00:24:28
【问题描述】:

我有一个带有按钮 ButtonAdd 的网络表单。我点击ButtonAdd 并调用事件处理程序ButtonAdd_Click()

这一系列事件在ClassX 中中断,并具有如下所示的方法ReturnResults()

public DataTable ReturnResults(string ConnectionString, string Employee)
{
    DataSet projects = new DataSet();
    string sqlSelect = string.Format("usp_ReturnEmplData '{0}'", Employee);
    try
    {
        nsbProject = SqlHelper.ExecuteDataset(ConnectionString, CommandType.Text, sqlSelect);
    }
    catch (SqlException e)
    {
        throw;
    }
    DataTable empTable = projects.Tables[0];
    return empTable;
}

ReturnResults()不是直接从webform调用的,但是不知道这个方法到底是谁调用的。

所以现在调试器点击throw;,按下F11(“step into”)将我带到带有非托管错误的网络浏览器。

我假设通过抛出异常,调试器会将我带到上一个名为ClassX.ReturnResults() 的类,依此类推,直到到达网络表单。但这并没有发生。一旦throw; 被点击,我就会在网络表单中得到未处理的错误,而这正是我想要避免的。

我的问题是:如何查看所有调用(在ButtonAdd_Click()ReturnResults 之间,而无需调试按钮单击?

【问题讨论】:

  • 查看异常对象中的堆栈跟踪。
  • 请注意,如果您唯一要做的就是再次抛出异常,那么捕获异常是没有意义的。通常,您捕获异常是因为您可以以某种方式处理它,或者因为您想向异常添加更多详细信息并重新抛出它,或者因为您想在有更多上下文的地方记录异常详细信息并重新抛出它。
  • 另外请注意,传递 DataTables 会使您的应用程序变得脆弱、难以使用并且效率低于应有的水平。您是否考虑过创建类来表示您的数据并传递这些数据?这通过诸如Dapper 之类的 ORM 变得相当容易。
  • @KennethK.,谢谢。那行得通。
  • 我记录了异常,我只是没有将它包含在示例中。

标签: c# asp.net visual-studio-2013 exception-handling webforms


【解决方案1】:

正如 Kenneth K 所提到的,查看异常对象中的堆栈跟踪将显示所有先前的调用,以到达进行调用的调用。

我刚刚意识到最后一个方法是唯一一个带有try-catch statement 的方法,这意味着throwingrethrowing 异常将不起作用,因为之前的调用没有try-catch statement

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-09
    • 2022-01-23
    • 2011-03-04
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多