2011-09-25 66 views
0

我想插入MySqlDataReader读取值到一个数组中。但我得到异常“索引超出了数组的界限”。这是我的代码,索引超出了数组的边界在c#

 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++; 

      } 

我该怎么做。任何人都可以帮助我?

+0

ho我可以接受答案吗? – sumona

+0

点击你的名字进入你的个人资料,然后你会看到你所问的所有问题。然后通过点击打开问题,并通过点击答案左侧的勾号接受有帮助的答案。 – evilone

+0

@evilone现在我接受一些答案,所以我认为你必须帮助我。 – sumona

回答

2

尝试清洁您的代码很少,并使用动态调整大小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(); 
+0

如果我只想使用数组,那么我在做什么@darin? – sumona

+0

@sumona,看看我的代码示例的最后一行。它将'List '转换成一个数组。 –

+0

var意思是@darin?它为var提供了错误。 – sumona

2

这看起来可疑的对我说:

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

这意味着你取行0,第1行1列,2行等2列的列0 ...但你只得到了一列(“旗”)。

我怀疑你的意思是:

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 
} 
+0

如果我想使用数组,那么@Jon怎么办? – sumona

+0

@sumona:那么,我会问*为什么*你想先使用数组...但是你总是可以在列表中调用'ToArray()'。重要的是,创建数组后,数组始终具有固定的大小 - 但您不知道结果集中有多少行。 –

+0

如果列表是int类型,那么我写什么,而不是“data.Add(dtr.GetValue(0).ToString());” @jon – sumona

相关问题