Итак, вам нужен четвертый ряд, а не четвертый столбец, к которому вы пытаетесь получить доступ s.GetString(3)
:
int rowNum = 0;
while(s.Read())
{
if(++rowNum == 4)
{
return s.GetString(0);
}
}
return "false";
Однако немного странно получить доступ к четвертому ряду, когда вы не используете Order By
. Вы также должны возвращать только нужную строку с правильным SQL-запросом.
Вы также открыты для внедрения SQL, если здесь используется конкатенация строк:
cmd.CommandText = "select profile from user where name = '" + login + "';";
Использовать параметры sql:
cmd.CommandText = "select profile from user where name = @login";
cmd.Parameters.Add("@login", SqlDbType.VarChar).Value = login;
имеет 4 столбца, а не строки
Хорошо, значит вы хотите четвертый столбец. Почему вы не используете имя вместо этого?
Поскольку вы выбираете только столбец profile
(четвертый), вы можете просто использовать GetString(0)
. Но вы также можете выбрать все столбцы и затем определить правильный индекс с помощью GetOrdinal
:
int profileColumnIndex = s.GetOrdinal("profile");
return s.GetString(profileColumnIndex);
Это полезно, если вы не управляете запросом или он может быть изменен в будущем.