IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET MVC Discussion :

Erreur : 'SqlDataReader' ne contient pas de définition pour 'Close' [Débutant]


Sujet :

ASP.NET MVC

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2013
    Messages : 9
    Points : 11
    Points
    11
    Par défaut Erreur : 'SqlDataReader' ne contient pas de définition pour 'Close'
    Bonjour,

    J'essaie de me connecter à une base de donné pour récupérer les données d'un utilisateur. Le problème c'est que lorsque je veux fermer mon objet SqlDataReader, je n'arrive pas.
    Visual studio me dit que la méthode Close() n'existe pas alors que dans la documentation c'est écrit qu'elle existe.

    Erreur CS1061 'SqlDataReader' ne contient pas de définition pour 'Close' et aucune méthode d'extension 'Close' acceptant un premier argument de type 'SqlDataReader' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante*?)
    Je travaille avec .net Core.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    public User getUser(string login)
            {
                string strRequete = "SELECT * FROM Users WHERE Login=@login";
                SqlCommand command = new SqlCommand(strRequete, connection);
     
                //Create parameters
                command.Parameters.Add(new SqlParameter("@login", System.Data.SqlDbType.VarChar, 50));
                //Affect parameters
                command.Parameters["@login"].Value = login;
     
                try
                {
                    connection.Open();
     
                    SqlDataReader reader = command.ExecuteReader();
     
                    User user = null;
                    while (reader.Read())
                    {
                        user = new User(reader.GetInt32(0), reader.GetString(1), reader.GetString(2), reader.GetString(3), 
                            reader.GetString(4), reader.GetString(5).ToCharArray()[0], reader.GetString(6), reader.GetString(7), reader.GetString(8), reader.GetBoolean(9));
                    }
     
                    reader.Close();
     
                    connection.Close();
     
                    return user;
                }
                catch (Exception e)
                {
                    Console.WriteLine("L'erreur suivante a été rencontrée :" + e.Message);
                }
     
                return null;
            }
    Est-ce que quelqu'un a déjà eu ce problème?

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    C'est typiquement un scenario ou il vaut mieux utiliser le mot clef using. Je te donne un squelette, a toi de le completer:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    User user = null;
     
    using (var sqlConnection = new SqlConnection())
    {
        using (var sqlCommand = new SqlCommand())
        {
            sqlConnection.Open();
     
            using (var dr = sqlCommand.ExecuteReader())
            {
                while (dr.Read())
                {
                    user = new User(reader.GetInt32(0), reader.GetString(1), reader.GetString(2), reader.GetString(3), 
                            reader.GetString(4), reader.GetString(5).ToCharArray()[0], reader.GetString(6), reader.GetString(7), reader.GetString(8), reader.GetBoolean(9));
                }
            }
        }
    }
     
    return user;
    En gros cela fonctionne comme un try/catch/finally, et ca va s'occuper de fermer et liberer les objets pour toi. Donc pas besoin de te soucier d'appeler Close() ou autre
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/12/2015, 15h10
  2. Réponses: 1
    Dernier message: 26/08/2009, 15h44
  3. Réponses: 0
    Dernier message: 15/07/2009, 17h20
  4. Réponses: 2
    Dernier message: 16/04/2008, 13h40
  5. Réponses: 16
    Dernier message: 20/12/2007, 16h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo