web-dev-qa-db-fra.com

SqlDataReader Obtention de la valeur par nom de colonne

En utilisant les méthodes de SqlDataReader , je peux obtenir la valeur d’une colonne en lui transmettant son nombre ordinal, tel que la valeur de la première colonne si je passe dans read.GetValue(0) ou de la deuxième colonne si je passe dans read.GetValue(1)

En examinant les méthodes, je ne vois pas d’option permettant d’obtenir la valeur d’une colonne en transmettant le nom d’une colonne, telle que ColumnID. Dans mon exemple mythique, je voudrais passer à read.GetValueofColumn("ColumnID") et lire la valeur dans la colonne (notez que la méthode GetValueofColumn n'existe pas aussi loin que je puisse le dire à partir de la liste de méthodes).

Est-ce que je manque la méthode pour faire ceci ou un moyen de faire ceci?

7
user9927

Vous pouvez obtenir l'ordinal de la colonne en utilisant la méthode GetOrdinal afin que votre appel puisse être

read.GetValue(read.GetOrdinal("ColumnID"));
18
MatthewG

Datareader a une méthode numérique (basée sur la position) et une méthode textuelle (basée sur le nom du champ). Donc, avec le nom du champ, vous pouvez obtenir la valeur comme 

object value = reader["some field name"];

(en supposant que reader est une datareader)

12
Emanuele Greco

Réponse tardive, mais ... Cela a toujours fonctionné pour moi, et je pense que c'est plus proche de ce que l'OP tente de réaliser:

using (SqlCommand cmd = new SqlCommand(cmdString, cn))
using (SqlDataReader rs = cmd.ExecuteReader()) {

    if (rs.HasRows) {

        while (rs.Read()) {

            Meeting_DiscussionItems_MX di = new Meeting_DiscussionItems_MX();

            di._Discussion_Item_MX_ID   = (int) rs["Discussion_Item_MX_ID"];
            di._Meeting_ID              = (int) rs["Meeting_ID"];
            di._Discussion_Item_Name    = (string) rs["Discussion_Item_Name"];
            di._Display_Order           = (string) rs["Display_Order"];
            di._Status                  = (string) rs["Status"];
            di._Discussion_Items        = (string) rs["Discussion_Items"];
            di._ETOPS_Items             = (string) rs["ETOPS_Items"];
            di._Followup                = (string) rs["Followup"];
            di._Pinned                  = (string) rs["Pinned"];
            di._Active                  = (string) rs["Active"];

            _Meeting_DiscussionItems_MX.Add(di);
        }

    }
}
5
Kirby L. Wallace

vous pouvez utiliser:

MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
    Console.WriteLine(rdr["id"] + " -- " + rdr["time"]);
}
rdr.Close();

id et time sont des noms de colonne

0
Grzegorz J