ASP.NET在不同环境中的意外和不同行为

时间:2009-04-17 12:56:14

标签: asp.net windows-server-2003

我有一个我正在尝试清理的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添加到查询字符串一样,网站正常工作(显示数据库中的数据)。

另外,如果您对如何测试此方案有任何建议,请告诉我,如果不将代码部署回生产(已经回滚)。

3 个答案:

答案 0 :(得分:3)

我认为您应该尝试在catch块中打印出异常详细信息以查看问题所在。它可能会导致数据库出现连接错误。

答案 1 :(得分:0)

错误可能是任何事情,你应该考虑打印出来或将其记录在某个地方,而不是假设没有数据。您还要为两个不同的代码路径向UI输出相同的错误消息,这使得调试更加困难,尤其是在不知道是否发生异常的情况下,如果是,那么它是什么。

通常情况下,最好不要在这种情况下捕获所有异常,尤其是在不记录错误的情况下。相反,您应该捕获特定的异常并适当地处理这些异常,并且任何真正的异常都可以传递到堆栈,理想情况下是一个全局错误处理程序,它可以记录它和/或发出某种错误通知。

答案 2 :(得分:0)

昨天我发现了原因。简而言之,因为当我将文件从我的计算机复制到我的开发测试环境中时,我错过了一个文件,具有讽刺意味的是它可以工作,而不是。所以最终它在两种环境中的功能都相同。