【发布时间】:2014-10-27 19:48:10
【问题描述】:
我们生产服务器上的一些代码突然给我们带来了一些麻烦。大约一年来生产没有改变,我已经确认数据库也没有改变。
如果我在我的机器上运行相同的代码(Yay Source Control!),我不会收到生产中出现的错误,并且一切正常。我将在下面发布代码,但肯定有其他事情发生。
如果我错了,请纠正我,但如果没有 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。”
【问题讨论】:
-
连接字符串有变化吗?与该用户相关的数据库中的权限?如果使用 Windows 身份验证,是否更改了运行 AppPool 的用户?
-
连接字符串没有改变,权限也没有改变。我已经与 DBA 确认了这一点,并且在我的 PC 上运行代码时使用了相同的连接字符串(有效)。谢谢!
-
实际错误是什么? “找不到表 [0]”听起来不像 .NET 异常。
-
在 GetData 的
//Do Error stuff中,您是否重新抛出异常?你在那里有什么实际的“做事”? -
我感觉你需要的线索将在
//Do error stuff中,特别是被捕获的Exception中的InnerException。