我有一个for循环用于获取列表项以便在我的折线图中显示。这很简单,但我得到一个索引超出范围错误。我理解for循环中发生的事情的方式是,只要i小于indexCount(),它就会继续计数。我的为什么要超越我的索引方法?我已经研究并使用断点找不到任何东西,我=我的收藏大小。
List<ChartData> points = ChartData.getData();
for (int i = 0; i < chartData.indexCount(); i++)
{
series0.AddItem(points[i].Produced);
series1.AddItem(points[i].Labeled);
RadChart1.PlotArea.XAxis.Items.Add(new ChartAxisItem(points[i].CasesLabeled.ToString()));
}
我创建了一个自定义索引,这样我就可以从数据库中获取大部分行以供显示。因此那里有chartData.indexCount()
方法。这是我的indexCount方法,也许这里出了问题?
public int indexCount()
{
StringBuilder sqlString = new StringBuilder();
sqlString.Append("SELECT Count(Number) FROM SomeDB.dbo.Order");
SqlDataReader reader = null;
SqlConnection dbConn = DBHelper.getConnection();
try
{
reader = DBHelper.executeQuery(dbConn, sqlString.ToString(), null);
if (reader != null)
{
while (reader.Read())
{
number = reader.GetInt32(0);
}
}
reader.Close();
reader.Dispose();
dbConn.Close();
dbConn.Dispose();
}
catch (Exception ex)
{
throw ex;
}
return number;
}
答案 0 :(得分:1)
首先,我建议使用ExecutrScalar而不是ExecuteReader。
其次,你有点列表 - 该列表知道它有多少项(Count属性)....至少使用Math.Min
来确保你没有溢出你的列表。
正如一个好建议 - 不要关闭reader对象(或任何实现IDisposable的对象)。相反,在using语句中声明对象:
using (reader = DBHelper.executeQuery(dbConn, sqlString.ToString(), null))
{
// code which using reader
}
最后 - 不要在每次迭代时调用indexCount ......只需将结果保存到变量中......