2013-12-18 7 views
0

У меня есть два метода: один хранит значения в arraylist i.e Button_1Click(). Другой метод NextClick() извлекает данные из arraylist и сохраняет его в текстовое поле. я получаю индекс массива из оценка погрешности:ArgumentOutOfRangeException: Index был за пределами допустимого диапазона

ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection

ArrayList list = new ArrayList(); 
int i = 0; 
protected void Button1_Click(object sender, EventArgs e) 
{ 
    OleDbConnection conn = new OleDbConnection(); 
    OleDbDataReader dReader; 
    conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + 
     @"data source=D:\asp\data\test.mdb;"; 
    conn.Open(); 
    OleDbCommand cmd = new OleDbCommand("SELECT * FROM D", conn); 
    dReader = cmd.ExecuteReader(); 

    while (dReader.Read()) 
    { 
     String temp = dReader[1].ToString(); 
     list.Add(temp); 
     temp = dReader[2].ToString(); 
     list.Add(temp); 

    } 

    dReader.Close(); 
    conn.Close(); 
} 
protected void next_Click(object sender, EventArgs e) 
{ 

    Carname.Text = list[i] as String; 
    i++; 
} 
+0

И что тогда произошло? Вы не думаете, что вы должны проверить значение индекса ** i **, прежде чем просто прочитать его из ** списка [i] **? Что-то вроде ** if (list.Count <= i) return; ** –

+0

Меня озадачивает то, что люди, которым даже удается работать с базами данных, не видят, почему простые вещи вроде этого не работают. –

+0

, когда я использовал оператор if для проверки i меньше, чем list.count, я не получаю ошибку, но ничего не отображается в текстовом поле. – ares

ответ

1

Look дружище, каждый раз при нажатии любой из кнопок, этот бит здесь выполняет:

ArrayList list = new ArrayList(); 
int i = 0; 

Это означает, что они будут всегда возвращайтесь в исходное состояние, когда вы нажимаете кнопку. Вы можете попробовать сами -> поставить точку останова на любой из этих строк и продолжить и нажать кнопку.

+0

И почему этот код выполняется каждый раз, когда нажимается кнопка? –

+0

@ JuliánUrbano Это настоящий вопрос или вы говорите, что ответ - это дерьмо? –

+0

lol, подлинный .... –

0

Я изменил свой метод button1_click и вместо этого использовал список. Теперь это работает!

while (dReader.Read()) 
    { 
     ListBox1.Items.Add(dReader[1].ToString()+""+dReader[2].ToString()); 

    } 
Смежные вопросы