我有一个我正在尝试清理的ASP.NET站点(VB.NET)。最初创建它的时候没有错误处理,我正在尝试添加它以改善用户体验。
Try
If Not String.IsNullOrEmpty(strMfgName) And Not String.IsNullOrEmpty(strSortType) Then
If Integer.TryParse(Request.QueryString("CategoryID"), i) And String.IsNullOrEmpty(Request.QueryString("CategoryID"))
MyDataGrid.DataSource = ProductCategoryDB.GetMfgItems(strMfgName, strSortType, i)
Else
MyDataGrid.DataSource = ProductCategoryDB.GetMfgItems(strMfgName, strSortType)
End If
MyDataGrid.DataBind()
If CType(MyDataGrid.DataSource, DataSet).Tables("Data").Rows.Count > 0 Then
lblCatName.Text = CType(MyDataGrid.DataSource, DataSet).Tables("Data").Rows(0).Item("mfgName")
End If
If MyDataGrid.Items.Count < 2 Then
cboSortTypes.Visible = False
table_search.Visible = False
End If
If MyDataGrid.PageCount < 2 Then
MyDataGrid.PagerStyle.Visible = False
End If
Else
lblCatName.Text &= "<br /><span style=""fontf-size: 12px;"">There are no items for this manufacturer</span>"
MyDataGrid.Visible = False
table_search.Visible = False
End If
Catch
lblCatName.Text &= "<br /><span style=""font-size: 12px;"">There are no items for this manufacturer</span>"
MyDataGrid.Visible = False
table_search.Visible = False
End Try
现在,这是为了避免通过捕获异常来生成500错误。查询字符串上可以有三个项目,但这里只有两个问题。在我的测试环境和Visual Studio中,当我运行此站点时,该项是否在查询字符串上并不重要。在生产中,它确实重要。如果查询字符串上不存在第三个项目(SubCategoryID),则显示“此制造商没有项目”而不是数据库中的数据。
在两个不同的环境中,我看到两个不同的代码执行路径,尽管URL相同且代码库相同。
该站点在带有IIS 6的Server 2003上运行。
思想?
编辑: 在回答下面的答案时,我怀疑这是一个连接错误(虽然我看到了你要做的),就像我将SubCategoryID添加到查询字符串一样,网站正常工作(显示数据库中的数据)。
另外,如果您对如何测试此方案有任何建议,请告诉我,如果不将代码部署回生产(已经回滚)。
答案 0 :(得分:3)
我认为您应该尝试在catch块中打印出异常详细信息以查看问题所在。它可能会导致数据库出现连接错误。
答案 1 :(得分:0)
错误可能是任何事情,你应该考虑打印出来或将其记录在某个地方,而不是假设没有数据。您还要为两个不同的代码路径向UI输出相同的错误消息,这使得调试更加困难,尤其是在不知道是否发生异常的情况下,如果是,那么它是什么。
通常情况下,最好不要在这种情况下捕获所有异常,尤其是在不记录错误的情况下。相反,您应该捕获特定的异常并适当地处理这些异常,并且任何真正的异常都可以传递到堆栈,理想情况下是一个全局错误处理程序,它可以记录它和/或发出某种错误通知。
答案 2 :(得分:0)
昨天我发现了原因。简而言之,因为当我将文件从我的计算机复制到我的开发测试环境中时,我错过了一个文件,具有讽刺意味的是它可以工作,而不是。所以最终它在两种环境中的功能都相同。