web-dev-qa-db-fra.com

Comment utiliser la méthode executeReader () pour récupérer la valeur d'une seule cellule

J'ai besoin d'exécuter la commande suivante et de passer le résultat à une étiquette. Je ne sais pas comment le faire avec Reader. Quelqu'un peut me donner un coup de main?

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

Comme vous pouvez le voir, je crée l'instruction SQL et je l'exécute, mais cela ne fonctionne pas. Pourquoi?

La console dit:

Ne peut pas implicitement SqlDataReader to String ...

Comment puis-je obtenir les résultats souhaités sous forme de chaîne afin que l'étiquette puisse l'afficher correctement.

28
sfrj

Il n'est pas recommandé d'utiliser DataReader et Command.ExecuteReader pour obtenir juste une valeur de la base de données. Au lieu de cela, vous devez utiliser Command.ExecuteScalar comme suit:

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

Ici est plus d'informations sur la connexion à la base de données et la gestion des données.

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() est ce dont vous avez besoin ici

2
iTSrAVIE

question en double qui dit essentiellement utiliser ExecuteScalar() à la place.

1
m.edmondson