索引超出了数组的范围,但我看不到错误

时间:2014-02-11 13:18:09

标签: c# mysql mysqldatareader

int n =Count("SELECT COUNT(*) FROM information_schema.SCHEMATA");; //return 6

TreeNode[] db_name = new TreeNode[n];
MySqlCommand cmd = new MySqlCommand("show databases", connection);
MySqlDataReader dataReader = cmd.ExecuteReader();

for(i=0;i<n;i++)
{
    dataReader.Read();
    db_name[i] =  new TreeNode(dataReader[i].ToString());
}  

为什么我得到IndexOutOfRangeException未处理,Index超出了数组的范围? 如果Count()函数返回6表示有6行所以6个字段[0] [1] [2] [3] [4] [5] 我在for循环中放了一个断点,当i = 1时,我在第二个循环得到错误。 我该如何解决这个问题?我看不出错误。 提前谢谢。

2 个答案:

答案 0 :(得分:2)

dataReader.Read()的调用会前进到下一个可用记录。

当您致电dataReader[i]时,您可能正在尝试获取返回数据中不存在的列。在第一次迭代中,dataReader[i]试图获得第一列,但是在第二次迭代时它只是试图获得第二列,然后是第三列,等等。你可能不会返回6列,所以这就是抛出异常。

你可以尝试这样的事情,假设每条记录只是一个字符串:

for(i=0; i<n; i++)
{
    dataReader.Read();
    db_name[i] =  new TreeNode(dataReader.GetString(0));

          // or use dataReader[0].ToString(), but don't change the index of 0
}

答案 1 :(得分:1)

请尝试以下操作。

int i=0;
if (dataReader.HasRows)
{
    while (dataReader.Read())
    {
        db_name[i] =  new TreeNode(dataReader.GetString(0));          
    }
    i++;
}