我有这段代码
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中有异常,我怎样才能在屏幕上显示内容?
答案 0 :(得分:1)
这是因为throw ex;
之后的Response.Write()
。如果你把它拿走,事情应该按照你的预期运作。
现在这已经分类了,我建议几点:
throw;
而不是throw ex;
,这将无法保留您的堆栈跟踪。无法连接数据库
这可能是一条消息,说该网站遇到问题并要求他们稍后再试一次,而有人会调查此问题。
答案 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();