Вы получаете только одну строку, потому что вы звоните reader.Read()
только один раз. Каждый раз, когда вы вызываете Read()
, читатель переходит к следующей строке и возвращает true; или, когда читатель проходит мимо последней строки, он возвращает false.
Индексатор возвращает данные из дополнительных столбцов , и в вашем запросе только один столбец; вот почему индексы 1 и 2 не работают.
EDIT:
Если вы пытаетесь перебрать ридер, вам нужно поместить три текстовых поля в структуру, где они также могут быть зациклены. Проще, но менее гибко, но правильно:
if (reader.HasRows)
{
reader.Read()
textBox1.Text = reader[0].ToString();
reader.Read()
textBox2.Text = reader[0].ToString();
reader.Read()
textBox3.Text = reader[0].ToString();
reader.Close();
}
более гибкий:
List<TextBox> boxes = new List<TextBox> { textBox1, textBox2, textBox3 };
for (int index = 0; index < boxes.Count; index++)
{
if (!reader.Read())
{
break; // in case there are fewer rows than text boxes
}
boxes[index] = reader[0].ToString();
}