我收到错误,不知道如何修复它。当我将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
答案 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();