Как использовать метод executeReader() для извлечения значения только одной ячейки
Мне нужно выполнить следующую команду и передать результат на метку. Я не знаю, как это сделать с помощью Reader. Кто-то может дать мне руку?
String sql = "SELECT * FROM learer WHERE learer.id = " + index;
SqlCommand cmd = new SqlCommand(sql,conn);
learerLabel.Text = (String) cmd.ExecuteReader();
Как вы можете видеть, я создаю инструкцию SQL и выполняю ее, но она не работает. Почему?
Консоль говорит:
Нельзя неявно использовать SqlDataReader для Строка...
Как я могу получить желаемые результаты как String, чтобы ярлык мог отображать его правильно.
Ответы
Ответ 1
Не рекомендуется использовать DataReader
и Command.ExecuteReader
для получения только значения из базы данных. Вместо этого вы должны использовать Command.ExecuteScalar
следующим образом:
String sql = "SELECT ColumnNumber FROM learer WHERE learer.id = " + index;
SqlCommand cmd = new SqlCommand(sql,conn);
learerLabel.Text = (String) cmd.ExecuteScalar();
Здесь больше информации о подключении к базе данных и управлении данными.
Ответ 2
using (var conn = new SqlConnection(SomeConnectionString))
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "SELECT * FROM learer WHERE id = @id";
cmd.Parameters.AddWithValue("@id", index);
using (var reader = cmd.ExecuteReader())
{
if (reader.Read())
{
learerLabel.Text = reader.GetString(reader.GetOrdinal("somecolumn"))
}
}
}
Ответ 3
ExecuteScalar()
- это то, что вам нужно здесь
Ответ 4
Дублирующий вопрос, который в основном говорит об использовании ExecuteScalar()
.