繁体   English   中英

索引在C#中超出数组的范围

[英]Index was outside the bounds of the array in c#

我想将MySqlDataReader读取的值插入到数组中。但是却出现异常“索引在数组的边界之外”。 这是我的代码,

        string[] a = new string[1000];

        string myconstring = "SERVER=localhost;" + "DATABASE=alicosms;" + "UID=root;" + "PASSWORD=;";
        MySqlConnection mycon = new MySqlConnection(myconstring);
        string sql = "SELECT flag FROM sms_data_bankasia group by flag";
        MySqlCommand comd = mycon.CreateCommand();
        comd.CommandText = sql;
        mycon.Open();
        MySqlDataReader dtr = comd.ExecuteReader();
        count = 0;


        int i = 0;
            while (dtr.Read())
            {

                a[i] = dtr.GetValue(i).ToString();
                i++;

            }

我该怎么办?有人可以帮助我吗?

在我看来,这很可疑:

a[i] = dtr.GetValue(i).ToString();

这意味着您要获取第0行的第0列,第1行的第1列,第2行的第2列,等等……但是您只有一个列(“标志”)。

我怀疑你的意思是:

a[i] = dtr.GetValue(0).ToString();

但是,如果行数超过1000,那仍然会失败-最好使用List<string>

List<string> data = new List<string>();
while (dtr.Read())
{
    data.Add(dtr.GetValue(0).ToString()); // Or call GetString
}

尝试稍微清理一下代码,然后使用动态调整大小的List<T> ,您可以在其中添加元素:

var result = new List<string>();
var myconstring = "SERVER=localhost;DATABASE=alicosms;UID=root;PASSWORD=;";
using (var con = new MySqlConnection(myconstring))
using (var cmd = con.CreateCommand())
{
    con.Open();
    cmd.CommandText = "SELECT flag FROM sms_data_bankasia group by flag";
    using (var reader = cmd.ExecuteReader())
    {
        while (reader.Read())
        {
            result.Add(reader.GetString(reader.GetOrdinal("flag")));
        }
    }
}

string[] a = result.ToArray();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM