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

C# Discussion :

Insérer des données dans une base de donnée [Débutant]


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Insérer des données dans une base de donnée
    Bonjour,

    je suis en grosse galère.

    j'ai créé une petite base de donnée (je donnerai plus d'info si besoin, je veux pas surcharger mon post en info inutiles) et je souhaite ajouter des données vers cette base en CodeFirst, mais impossible d'y arriver.

    Est ce qu'il faut utiliser du c#, du sql, je suis complètement perdu, et je ne trouve nulle part de réponse à mes questions.

    quel code écrire pour y arriver ? sachant que j'ai crée mon DbContext, les DbSet et les classes représentant les tables avec leurs propriétés

    merci d'avance

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur .Net
    Inscrit en
    Décembre 2014
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 71
    Points : 147
    Points
    147
    Par défaut
    Salut,

    Si tu es totalement débutant en EF et EF Code First je te conseille de lire le petit tutoriel disponible sur developpez.net : http://reward.developpez.com/tutorie...he-code-first/

    Ensuite, les DbSet hérite de DbQuery qui hérite elle même IOrderedQueryable, IQueryable, IEnumerable, IListSource, IDbAsyncEnumerable.

    Tu remarquera que IEnumerable est présent, donc DbSet se comporte comme un Enumerable/Collection.

    Donc pour faire des manipulations dans ta BDD, tu va utiliser simplement du C#.

    Exemple pour un DBSet nommé User:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    using(var context = new DbContext()){
    context.User.Add(new User { UserName = "Toto", Password = "Azerty123*"});
    context.SaveChanges();
    }
    Ce bout de code ajoute un utilisateur au DbSet User et sauvegarde les changements dans la table.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    merci pour ta réponse.

    pas de problème avec les deux dernières lignes, mais je ne comprends pas la première

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using(var context = new DbContext()){
    que signifie le using ?

    pourquoi faut-il créer un nouveau DbContext ici ? je demande car pour moi j'en ai déjà créé un.

    je vais mettre le code que j'ai crée, désolé si ca fait lourd (en meme temps c'est pas du code très compliqué ) mais ca sera plus clair pour moi, tu pourras me dire plus précisément ou je me plante peut être (j'espère)

    c'est une Bdd toute simple de liste de course avec deux tables :

    un pour les produits :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        public class Produit
        {
            public int Id { get; set; }
            public string NomProduit { get; set; }
            public string RayonMagasin { get; set; }
        }

    ici j'ai créé ma classe qui hérite de DbContext

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    public class ListedeCourseContext : DbContext
        {
            public DbSet<Produit> Produits { get; set; }
            public DbSet<Rayon> Rayons { get; set; }
     
            public ListedeCourseContext()
                : base("name=DefaultConnection")
            {
            }
     
     
        }
    et enfin mon prg ou j'instancie mes deux tables et ou j'appelle la méthode que j'essaie de créer

    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
     
        class Program
        {
            public static void Main(string[] args)
            {
                var tableProduit = new Produit();
                var tableRayon = new Rayon();
     
                Console.WriteLine("Veuillez choisir une action");
                Console.WriteLine("1.Créer une nouveau produit");
                Console.WriteLine("2.Créer un nouveau rayon");
                var choix = Console.ReadLine();
                if (choix == "2")
                {
                    tableRayon.CreerRayon("Fruit et légume");
     
                }
            }
        }
    et enfin la classe rayons. c'est ici que j'aimerai créer une méthode qui me permette d'ajouter un rayon a partir de la console, mais c'est la que je bloque

    je voudrai écrire un truc du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableProduit.Nomrayon = nom
    Mais je n'ai pas accès à tableRayon depuis cette classe...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        public class Rayon
        {
            public int Id { get; set; }
            public string NomRayon { get; set; }
            public IList<Produit> ProduitsRayon { get; set; }
     
            public void CreerRayon(string nom)
            {
     
                Console.WriteLine("Le rayon " + nom + "a été crée");
                Console.ReadKey();
            }
        }
    si tu pouvais m'aider (toi ou quelqu'un d'autre) ca serait super.

    EDIT : je suis en train de lire le tutoriel que tu m'as envoyé, et je vois que les classes sont dans des fichier .DTO. Je n'ai pas créé mes classes la dedans. C'est grave ou c'est parce que mes version d'entity Framework, visual studio etc n'ont plus besoin de ca ?

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur .Net
    Inscrit en
    Décembre 2014
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 71
    Points : 147
    Points
    147
    Par défaut
    Un peux de doc sur le mot clef Using : https://docs.microsoft.com/fr-fr/dot...sing-statement

    pourquoi faut-il créer un nouveau DbContext ici ? je demande car pour moi j'en ai déjà créé un.
    Tu n'a pas besoin de créer autre choses, comme je n'avais pas ton code j'ai fait un exemple.
    D'ailleurs ici dans mon exemple je ne le créé pas, je l'instancie, c'est pour pouvoir utiliser toutes les fonctions de EF et lire/stocker mes informations en base.

    Pour créer un rayon tu doit faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     public void CreerRayon(string nom)
            {
     
                using(var context = new DbContext()){
                   context.Rayons.Add(new User {  NomRayon = nom }); // Tu ajoute un nouveau rayon à ton DbSet
                   context.SaveChanges(); // tu sauvegarde les changement en bdd
                }
                Console.WriteLine("Le rayon " + nom + "a été crée");
                Console.ReadKey();
            }

    je suis en train de lire le tutoriel que tu m'as envoyé, et je vois que les classes sont dans des fichier .DTO. Je n'ai pas créé mes classes la dedans. C'est grave ou c'est parce que mes version d'entity Framework, visual studio etc n'ont plus besoin de ca ?
    Effectivement EF a changé depuis ce tutoriel. Regarde surtout les manipulations plus que la mise en place.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class Produit
        {
            public int Id { get; set; }
            public string NomProduit { get; set; }
            public string RayonMagasin { get; set; }
        }

    Foreign Key dans la classe Produit :

    Si tu veux faire un lien vers le rayon ici tu devrais plutôt faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class Produit
        {
            public int Id { get; set; }
            public string NomProduit { get; set; }
            public int RayonId{ get; set; }
            public Rayon Rayon {get; set; }
        }
    Plus d'information dans la documentation : http://www.entityframeworktutorial.n...ode-first.aspx

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    ca maaaaaarche lol je fais une danse de la joie.

    bon j'ai galéré un peu parce que j'avais fait un copié collé de ton code et j'ai du changer quelques termes (dbcontext et user) mais ensuite ca a fonctionné nickel.

    Merci 5000 fois, j'ai galéré pendant 2 jours à trouver une solution, j'aurais du venir sur le forum plus rapidement.

    Du coup je me permettrait de remettre un post si j'ai d'autres problèmes dans le futur

    merci encore

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur .Net
    Inscrit en
    Décembre 2014
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 71
    Points : 147
    Points
    147
    Par défaut
    De rien

    Essaye de mettre en favoris les liens de la documentation que tu as besoin. Tu va finir par t'habituer et trouver les informations simples tout seul.
    Après parfois on bloque totalement et un petit coup de main et toujours le bienvenue ^^

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    j'aurais une autre question

    j'utilise la fonction using chaque fois que je veux acceder à ma base de donnée, mais le problème est qu'il y a un délai avant de pouvoir y accéder, et comme j'y accède souvent, ca ralenti mon programme. je voudrait pouvoir ouvrir l'accès a la base de données une seule fois en début de programme et la fermer en fin de programme.

    Je suppose que c'est possible, mais comment faut-il faire pour fermer l'accès en fin de programme pour ne pas monopoliser les ressources ?

    je pensais tout mettre dans un bloc try/catch/finally pour etre sur que l'accès soit fermé en cas de plantage
    .

    (et je suppose qu'il suffit d'écrire ca en début de programme pour ouvrir l'accès)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var context = new NomDeLApplicationContext
    merci ^^

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur .Net
    Inscrit en
    Décembre 2014
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 71
    Points : 147
    Points
    147
    Par défaut
    Citation Envoyé par crisikos Voir le message
    j'aurais une autre question

    j'utilise la fonction using chaque fois que je veux acceder à ma base de donnée, mais le problème est qu'il y a un délai avant de pouvoir y accéder, et comme j'y accède souvent, ca ralenti mon programme. je voudrait pouvoir ouvrir l'accès a la base de données une seule fois en début de programme et la fermer en fin de programme.

    Je suppose que c'est possible, mais comment faut-il faire pour fermer l'accès en fin de programme pour ne pas monopoliser les ressources ?

    je pensais tout mettre dans un bloc try/catch/finally pour etre sur que l'accès soit fermé en cas de plantage
    .

    (et je suppose qu'il suffit d'écrire ca en début de programme pour ouvrir l'accès)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var context = new NomDeLApplicationContext
    merci ^^
    Le using est une simplification syntaxique du bloc try/catch/finally.
    Je te laisse lire les réponses de ce post qui expliquent très bien les subtilités du mot clef using : https://www.developpez.net/forums/d1...brasse-coulee/

    Je ne connais pas ton niveau en Architecture logiciel, mais ce que tu souhaite faire ce rapproche du Repository Pattern et l'Injection de dépendance et tu n'a également pas précisé le contexte de ton application (Web, client lourd, mobile... ).

    Après je trouve cela étrange que tu ais une latence... En général les connexions à la DB sont rapides.

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

Discussions similaires

  1. inserer les données d'une base de données dans une autres?
    Par enstein8 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 14/10/2011, 13h33
  2. Réponses: 19
    Dernier message: 08/11/2010, 10h06
  3. Réponses: 5
    Dernier message: 10/01/2008, 08h47
  4. insérer des tables dans une base de données oracle
    Par Spacy_green dans le forum Oracle
    Réponses: 3
    Dernier message: 16/03/2007, 11h23
  5. insérer des élément dans une base de donné
    Par wiss20000 dans le forum JDBC
    Réponses: 5
    Dernier message: 01/03/2007, 14h49

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