繁体   English   中英

“找不到表[0]”-仅在生产中?

[英]“Cannot find Table[0]” - Only in production?

生产服务器上的某些代码突然给我们带来了麻烦。 大约一年后生产没有变化,我已经确认数据库也没有变化。

如果我在机器上运行相同的代码(“是”,则是“源代码控制”!),则不会得到生产中出现的错误,并且一切正常。 我将在下面发布代码,但是还必须进行其他操作。

如果我错了,请更正我,但是如果没有Table [0] ,那意味着我的查询没有返回任何数据。 但是,直接通过SQL Management Studio运行相同的查询会为我提供所需的数据。

    var ds = GetData(queryString);
    if (ds.Tables.Count > 0)
    {
        var ddlDataSet = GetAdds();
    }
    private List<tAdd> GetAdds()
    {
        var ds = GetData(queryString);
        var aList = new tAdd[ds.Tables[0].Rows.Count];//THIS IS WHERE ERROR HITS
        //Do other stuff
        ...
    }

    private DataSet GetData(string queryString)
    {
        var connectionString =
              ConfigurationManager.ConnectionStrings["constring"].ConnectionString;

        var ds = new DataSet();

        try
        {
            var connection = new SqlConnection(connectionString);
            var adapter = new SqlDataAdapter(queryString, connection);

            adapter.Fill(ds);
        }
        catch (Exception ex)
        {
            ErrorPanel.Visible = true;
            ErrorPanel.Enabled = true;
            SearchPanel.Enabled = false;

            const string NotificationsEmail = "mailto:emailguy@email.com";
            ErrorAlertLabel.Text =
                "An err happened. " +
                "Please contact the people who do stuff ";
            ErrorAlertLabel.Visible = true;
            ErrorMessageLiteral.Text = "<br />" + "<br />" +
                                       "Message: " + ex.Message + "<br />" +
                                       "StackTrace: " + ex.StackTrace + "<br />" +
                                       "Inner Exception: " + ex.InnerException + "<br />" +
                                       "Full Detals: " + ex + "<br />";
            ErrorMessageLiteral.Visible = true;
        }

        return ds;
     }

我可能只是尝试再次重新发布相同的版本,但是谁知道这是否可以解决它。 如果有人需要更多信息,请提前告知我并谢谢您。

实际的错误文本: “ System.IndexOutOfRangeException:找不到表0。”

我认为您在暴露的错误处理方面仍然存在缺陷。

GetData ,您捕获发生的任何Exception ,并将一堆UI元素设置为Visible并用信息填充它们,但是您不会阻止该过程继续 GetData只是在catch块之后继续,并返回一个空的DataSet GetAdds忽略了以下事实:发生了错误,尝试访问DataSet中不存在的表,并引发了另一个异常,该异常不是由您的代码处理,而是由ASP.NET处理,从而丢弃了所有错误信息,并仅显示一般错误页面。

我不会在低级方法中使用此类详细的错误处理,而是添加更多的全局错误处理。 由于您没有在异常中添加任何有意义的信息,因此,我会让它冒泡并在应用程序级别进行处理。

如果要向低级异常添加更多信息,请抛出一个具有更多详细信息的异常,并将原始异常分配给新异常的InnerException属性。

请检查生产中是否有任何pdb文件,如果没有,请转到项目,右键单击“构建”->“高级”->“调试信息”->“ pdb”下的“属性”,然后在生产环境中运行该文件,

如果您有这些内容,则可以得到它正在中断的确切行。

如果生产中的表上存在死锁,则可能会发生这种情况。 或权限丢失。

今天工作了。 我终于找到了我们的Web管理员,并要求他重新启动Web服务器-在我确认我的代码和数据库不是问题之后。

Web服务器启动后,一切都可以正常工作。 服务器上运行着许多应用程序,因此可能有些事情变得复杂了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM