1
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 is unhandled,Index was outside the bounds of the array?如果 Count() 函数返回 6,这意味着有 6 行,所以 6 个字段 [0][1][2][3][4][5] 我在 for 循环中放置了一个断点,我在第二个循环,当 i=1 时。我该如何解决?我看不到错误。提前致谢。

4

2 回答 2

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
}
于 2014-02-11T13:25:39.083 回答
1

请尝试以下方法。

int i=0;
if (dataReader.HasRows)
{
    while (dataReader.Read())
    {
        db_name[i] =  new TreeNode(dataReader.GetString(0));          
    }
    i++;
}
于 2014-02-11T13:24:32.490 回答