2013-12-18 139 views
0

我有兩種方法,一種將數值存儲到arraylist中,即Button_1Click()。另一種方法NextClick()從數組列表中檢索數據並將其存儲到文本框中。 我得到一個數組索引出界失誤:ArgumentOutOfRangeException:索引超出範圍

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

然後,發生了什麼呢?在你剛剛從** list [i] **中讀取之前,你不認爲你應該檢查** i **的索引值?像** if(list.Count <= i)返回; ** –

+0

這讓我感到困惑,即使設法使用數據庫的人也不明白爲什麼這樣簡單的東西不起作用。 –

+0

當我使用if語句來檢查我是不是list.count,我沒有得到錯誤,但沒有得到顯示在文本框中。 – ares

回答

1

看哥們,每次按下任何按鈕時,該位在這裏執行:

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

這意味着他們將當你點擊一個按鈕時,總是回到原來的狀態。您可以自己嘗試 - >在任何這些線上放置一個斷點,然後繼續並按下按鈕。

+0

爲什麼每次單擊按鈕時都會執行該代碼? –

+0

@JuliánUrbano這是一個真正的問題,或者你說的答案是狗屎? –

+0

哈哈,真的...... –

0

我修改了我的button1_click方法,並改用了一個listbox。現在它工作了!

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

    }