从Mysql数据库获取数据到C#数组超出范围的数组

时间:2015-07-29 20:34:44

标签: c# mysql arrays

我连接mysql数据库,然后我得到x行。当我尝试推送阵列时系统出错了。我不明白这个问题。

我试过这段代码。但我得到的错误就像债券阵列一样......

int uz = b();// this func. get row number on the table
int[] userData = new int[uz];
MySqlConnection bag = new MySqlConnection(connstring);
MySqlCommand cmd = new MySqlCommand("Select readerid From readers",bag);
bag.Open();
MySqlDataReader oku = cmd.ExecuteReader();
oku.Read();
for (int i = 0; i <= uz; i++) {
     userData[i] = Convert.ToInt32(oku[i]);
     listBox1.Items.Add(userData[i]);
}
bag.Close();

2 个答案:

答案 0 :(得分:0)

我认为你应该使用i&lt; uz而不是i&lt; = uz。

for(int i = 0; i&lt; uz; i ++)

修改 根据你的评论我认为你可以试试这个:

    List<int> userData = new List<int>();
    MySqlConnection bag = new MySqlConnection(connstring);

    MySqlCommand cmd = new MySqlCommand("Select readerid From readers",bag);

    bag.Open();
    MySqlDataReader oku = cmd.ExecuteReader();

    while (oku.Read())
    {
    int current = Convert.ToInt32(oku["readerid"]);
    userData.Add(current);

    listBox1.Items.Add(current);
    }

不要忘记在不需要它们之后关闭连接。

答案 1 :(得分:0)

看起来主要的问题是您认为oku[i]会从索引i的行中为您提供数据。它真正的作用是为当前行的索引i提供数据。但是,原始代码还存在其他几个问题。

这应该指向更好的方向:

var userData = new List<int>();
using (var bag = new MySqlConnection(connstring))
using (var cmd = new MySqlCommand("Select readerid From readers",bag))
{
    bag.Open();
    using (MySqlDataReader oku = cmd.ExecuteReader())
    {
        while (oku.Read())
        {
            userData.Add(oku[0]);
            //userData.Add(oku["readerid"]); //would also work
        }
    }
}