web-dev-qa-db-ja.com

executeReader()メソッドを使用して、1つのセルの値のみを取得する方法

次のコマンドを実行して、結果をラベルに渡す必要があります。 Readerを使用してどうすればよいのかわかりません。誰かが私に手を差し伸べることができますか?

String sql = "SELECT * FROM learer WHERE learer.id = " + index;
SqlCommand cmd = new SqlCommand(sql,conn);
learerLabel.Text = (String) cmd.ExecuteReader();

ご覧のとおり、SQLステートメントを作成して実行しますが、機能しません。どうして?

コンソールは言う:

暗黙的にSqlDataReaderを文字列にできません...

ラベルが適切に表示できるように、必要な結果を文字列として取得するにはどうすればよいですか?.

28
sfrj

データベースからone値を取得するためにDataReaderCommand.ExecuteReaderを使用することは推奨されません。代わりに、次のようにCommand.ExecuteScalarを使用する必要があります。

String sql = "SELECT ColumnNumber FROM learer WHERE learer.id = " + index;
SqlCommand cmd = new SqlCommand(sql,conn);
learerLabel.Text = (String) cmd.ExecuteScalar();

ここ は、データベースへの接続とデータの管理に関する詳細情報です。

27
Akram Shahda
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"))
        }
    }
}
44
Darin Dimitrov

ExecuteScalar()はここで必要なものです

2
iTSrAVIE

重複する質問 これは基本的にExecuteScalar()を代わりに使用することを示しています。

1
m.edmondson