获取"索引超出了数组的范围"

时间:2015-04-08 15:06:00

标签: c# sql arrays arraylist

我收到错误,不知道如何修复它。当我将SQL命令更改为另一个查询时,它似乎工作(具有相同数量的数据,10行)。想法?注意:我知道我应该在SQL命令中使用参数,我只是在测试。

SqlCommand getLabsCommand = new SqlCommand("SELECT labGrade FROM labStudent WHERE studentID = '"+Label1.Text+"' ");
    getLabsCommand.Connection = conn;

    ArrayList alMakers = new ArrayList();

    conn.Open();

    SqlDataReader dr = getLabsCommand.ExecuteReader();

    if (dr.HasRows)
    {
        while (dr.Read())
        {
            //alMakers.Add(dr.GetString(1));
            alMakers.Add(dr.GetInt32(1));

        }
    }
    string[] labsList = (string[])alMakers.ToArray(typeof(string));
    for(int i = 0; i < alMakers.Count; i++)
    {
        TextBox labs = new TextBox();
        labs.ID = "lab" + i; 
        form1.Controls.Add(labs);

        labs.Text = labsList.GetValue(i).ToString();
    }
    dr.Close();
    conn.Close();
}

上面的函数应该将这些值放在每个文本框中。 25 25 25 25 20 22 25 10 15 16

1 个答案:

答案 0 :(得分:1)

您只选择一列(SELECT labGrade FROM...);索引是从0开始的,因此只定义了GetInt32(0)GetInt32(1)指的是第二个列(第一列是索引0,第二列是索引1,等等)。你可能想要:

alMakers.Add(dr.GetInt32(0));

这类事情就像dapper这样的工具闪耀,顺便说一下:

var alMakers = conn.Query<int>(
    "SELECT labGrade FROM labStudent WHERE studentID = @id",
    new { id = Label1.Text }).AsList();