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时,我在第二个循环得到错误。 我该如何解决这个问题?我看不出错误。 提前谢谢。
答案 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++;
}