web-dev-qa-db-fra.com

Sélection SQL simple en C #?

Sur mon projet actuel, pour obtenir une valeur unique (sélectionnez la colonne dans la table où id = val), le programmeur précédent utilise un datarow, une datatable et un sqldatadapter (et bien sûr sqlconnection) juste pour obtenir cette valeur.

Existe-t-il un moyen plus simple de créer une requête de sélection simple? En php, je peux simplement utiliser mysql_query puis mysql_result et j'ai fini.

Ce serait bien si je pouvais simplement faire:

SqlConnection conSql = new SqlConnection(ConnStr);
SomeSqlClass obj = new SomeSqlClass(sql_string, conSql);
conSql.Close();
return obj[0];

Merci pour tous les conseils.

13
Chris

Vous pouvez ignorer DataReader et DataAdapter et appeler simplement ExecuteScalar() sur la commande sql.

using (SqlConnection conn = new SqlConnection(connString))
{
      SqlCommand cmd = new SqlCommand("SELECT * FROM whatever 
                                       WHERE id = 5", conn);
        try
        {
            conn.Open();
            newID = (int)cmd.ExecuteScalar();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
 }
38
womp

Vous recherchez probablement SqlCommand et SqlDataReader

Dictionary<int, string> users = new Dictionary<int, string>();
using(SqlConnection connection = new SqlConnection("Your connection string"))
{
    string query = "SELECT UserId, UserName FROM Users";
    SqlCommand command = new SqlCommand(query, connection);
    connection.Open();
    using (SqlDataReader reader = command.ExecuteReader())
    {
        while (reader.Read())
            users.Add(reader.GetInt32(0), reader.GetString(1));
    }
    connection.Close();
}
9

En fait, il existe une méthode SqlCommand.ExecuteScalar () qui retournera simplement le premier champ de la première ligne des résultats renvoyés. Juste pour toi.

Bibliothèque de classes. NET Framework SqlCommand .. ::. Méthode ExecuteScalar

Exécute la requête et renvoie la première colonne de la première ligne du jeu de résultats renvoyé par la requête. Les colonnes ou lignes supplémentaires sont ignorées.

5
user151323

Vous pouvez faire quelque chose de très similaire:

using (SqlConnection conn = new SqlConnection(ConnStr))
using (SqlCommand cmd = new SqlCommand(sql_string, conn))
{
    conn.Open();
    return cmd.ExecuteScalar();
}
4
LukeH

vous pouvez utiliser la fonction executeScalar SqlCommands. Veuillez regarder le lien suivant

http://msdn.Microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar.aspx

3
Fahad