for循环没有正确返回索引

时间:2014-03-03 19:16:24

标签: c# indexing

我有一个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;
}

1 个答案:

答案 0 :(得分:1)

首先,我建议使用ExecutrScalar而不是ExecuteReader。

其次,你有点列表 - 该列表知道它有多少项(Count属性)....至少使用Math.Min来确保你没有溢出你的列表。

正如一个好建议 - 不要关闭reader对象(或任何实现IDisposable的对象)。相反,在using语句中声明对象:

using (reader = DBHelper.executeQuery(dbConn, sqlString.ToString(), null))  
{
    // code which using reader 
} 

最后 - 不要在每次迭代时调用indexCount ......只需将结果保存到变量中......