为什么我的try catch无法在asp.net中运行c#

时间:2017-01-27 00:38:00

标签: c# asp.net error-handling

我有这段代码

 protected void Page_Load(object sender, EventArgs e)
    {
        try
        {  
        string connstr = ConfigurationManager.ConnectionStrings["dbConn"].ConnectionString;
        SqlConnection conn = new SqlConnection(connstr);
        conn.Open();
        SqlCommand cmdLoad = new SqlCommand(" *Connection string* ");
        cmdLoad.CommandType = System.Data.CommandType.Text;
        cmdLoad.Connection = conn;
        SqlDataReader rd = cmdLoad.ExecuteReader();
        StringBuilder resultsHtml = new StringBuilder();
        while (rd.Read())
        {
            resultsHtml.Append("<tr class'odd gradeX'>");
            resultsHtml.Append("<td>" + rd["region_location"].ToString() + "</td>");
            resultsHtml.Append("</tr>");
        }
        resultsPlaceHolder.Controls.Add(new Literal { Text = resultsHtml.ToString() });
        rd.Dispose();
        conn.Close();
             }
        catch (Exception ex)
        {
            Response.Write("Cant connect to database");
            throw ex;
        }
    }

在我的web.config中,我输入了正确的连接字符串,当然它会运行,它会执行try对吗?但是,当我更改连接字符串(不在数据库中)时,我无法让Response.Write();向浏览器显示内容。如果在try中有异常,我怎样才能在屏幕上显示内容?

3 个答案:

答案 0 :(得分:1)

这是因为throw ex;之后的Response.Write()。如果你把它拿走,事情应该按照你的预期运作。

现在这已经分类了,我建议几点:

  • 如果您正在尝试使用自定义错误处理逻辑,我建议您 检查this MSDN article这是一种更好的接近方式 的东西。
  • 当您想要重新抛出异常时,您应该使用throw;而不是throw ex;,这将无法保留您的堆栈跟踪。
  • 如果您的问题中提到的故障(例如未能连接到数据库)发生故障,您可能需要记录这些异常并向最终用户提供适当的反馈,这对他们来说更有意义: / LI>
  

无法连接数据库

这可能是一条消息,说该网站遇到问题并要求他们稍后再试一次,而有人会调查此问题。

答案 1 :(得分:0)

有几种try / catch模式。您使用了错误的

如果您希望完全处理错误并继续 这是你想要的

try
{
    DoSomething();
}
catch(SomeException ex)
{
    HandleTheError();
}

如果您希望让错误传播,但想添加一些逻辑,例如记录

try
{
    DoSomething();
}
catch(SomeException ex)
{
    LogTheError(ex);
    throw;
}

如果您希望抛出异常,但希望隐藏代码的内部工作 这是您使用的

try
{
    DoSomething();
}
catch(SomeException ex)
{
    LogTheError(ex);
    throw ex;
}

try
{
    DoSomething();
}
catch(SomeException ex)
{
    LogTheError(ex);
    throw new OtherException("Custom message");
}

如果您希望以静默方式吞下错误

try
{
    DoSomething();
}
catch(SomeException ex)
{
}

答案 2 :(得分:0)

在catch中使用以下内容:

Response.ClearHeaders();
Response.Write("Cant connect to database");
Response.End();