Partage
  • Partager sur Facebook
  • Partager sur Twitter

C# Connection à une base de donnée SQL Localdb

    15 mars 2021 à 11:11:51

    Bonjour a tous,

    Tout d'abord je souhaiterais vous prévenir, je suis totalement novice en c# et je ne maitrise pas encore tous les concept de ce langage.

    Voilà, j'ai développer une macro Excel, qui fonctionne très bien et je souhaiterais reproduire ce que fais cette macro Excel mais en c#. Le but étant d'apprendre ce langage non pas en suivant uniquement des tutos mais avec un projet entier. Voici pour l'introduction.

    Donc j'ai un formulaire (qui fonctionne) dans lequel l'utilisateur réalise un glissé déposé d'un fichier Excel pour récupérer le chemin d'accés de celui-ci. Le programme doit ouvrir le fichier Excel et enregistrer dans une bdd local le contenu de ce fichier (pour info le fichier Excel en question est normalisé, tous les fichiers Excel ne peuvent pas être utilisé).

    Donc j'arrive à ouvrir le fichier Excel et lire son contenu mais par contre au moment ou j'essai de connecté ma base de donnée j'ai une erreur que je n'arrive pas à comprendre.

    ErreurCS1061'DbContextOptionsBuilder' ne contient pas de définition pour 'UseSqlServer' et aucune méthode d'extension accessible 'UseSqlServer' acceptant un premier argument de type 'DbContextOptionsBuilder' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante ?) Ligne 311

    Je vous place le code ci-dessous:

    using System;
    using System.Collections.Generic;
    using System.Windows;
    using System.Windows.Media;
    using Microsoft.Win32;
    using Excel = Microsoft.Office.Interop.Excel;
    using Microsoft.EntityFrameworkCore;
    
    
    namespace test_Appli
    {
        /// <summary>
        /// Logique d'interaction pour MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            int return_control_form;
            int return_control_fichier;
            int return_control_date;
    
            public MainWindow()
            {
                InitializeComponent();
            }
    
            //Gestion du Glisser
            private void TextBlock_DragEnter(object sender, DragEventArgs e)
            {
                e.Effects = DragDropEffects.All;
            }
    
            //Gestion du Déposer
            private void TextBlock_Drop(object sender, DragEventArgs e)
            {
                String[] files = (string[])e.Data.GetData(DataFormats.FileDrop, false);
                foreach (string item in files)
                {
                    MessageBoxResult result = MessageBox.Show("Voulez-vous importer ce fichier ? " + item, "drag and drop", MessageBoxButton.YesNo, MessageBoxImage.Information);
                    switch (result)
                    {
                        case MessageBoxResult.Yes:
                            TxtBlck_URL_DSF.Text = item;
                            TxtBlck_URL_DSF.FontStyle = FontStyles.Normal;
                            // test si le fichier est accepté
                            return_control_fichier = Control_Fichier();
                            if (return_control_fichier > 0)
                            {
                                MessageBox.Show("Le fichier sélectionné ne correspond pas à un DSF du catalogue", "Warning", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                                TxtBlck_URL_DSF.Text = "Vous pouvez glisser directement le DSI dans cette zone au lieu de cliquez sur le bouton 'Parcourir'";
                                TxtBlck_URL_DSF.FontStyle = FontStyles.Italic;
                            }
                            break;
                        case MessageBoxResult.No:
                            TxtBlck_URL_DSF.Text = "Vous pouvez glisser directement le DSF dans cette zone au lieu de cliquez sur le bouton 'Parcourir'";
                            TxtBlck_URL_DSF.FontStyle = FontStyles.Italic;
                            break;
                    }
                }
            }
    
            // Click sur Parcourir
            private void Bt_Parcourir_Click(object sender, RoutedEventArgs e)
            {
                OpenFileDialog openFileDialog = new OpenFileDialog();
                if (openFileDialog.ShowDialog() == true)
                    TxtBlck_URL_DSF.Text = openFileDialog.FileName;
                else
                    MessageBox.Show("Vous devez choisir un fichier", "Warning", MessageBoxButton.OK, MessageBoxImage.Exclamation);
            }
    
            // Click sur le bouton Exécuter
            private void Bttn_Execute_Click(object sender, RoutedEventArgs e)
            {
                // Vérification si le formulaire est corectement renseigné
                return_control_form = Control_Formulaire();
                // Vérification si le fichier est accepté
                return_control_fichier = Control_Fichier();
                // Vérification si la date n'est pas dans le passée
                return_control_date = Control_Date();
                int total_control = 0;
    
                if (return_control_form > 0 && return_control_fichier == 0)
                {
                    total_control++;
                    MessageBox.Show("Le formulaire n'est pas correctement renseigné", "Warning", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                }
                if (return_control_fichier > 0)
                {
                    total_control++;
                    MessageBox.Show("Le fichier sélectionné ne correspond pas à un DSF du catalogue", "Warning", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                }
                if (return_control_date > 0)
                {
                    total_control++;
                    MessageBox.Show("Vous ne pouvez pas sélectionner une date dans le passé", "Warning", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                }
                // Si tout est bon, on ouvre le fichier Excel
                if (total_control == 0)
                {
                    OuvertureLectureXLS();
                }
            }
    
            // Vérification si le formulaire est corectement renseigné
            int Control_Formulaire()
            {
                return_control_form = 0;
                Color color = (Color)ColorConverter.ConvertFromString("#FFFFFFFF");
                TxtBx_Designation.Background = new System.Windows.Media.SolidColorBrush(color);
                TxtBx_Client.Background = new System.Windows.Media.SolidColorBrush(color);
                TxtBx_Site.Background = new System.Windows.Media.SolidColorBrush(color);
                TxtBx_Unit.Background = new System.Windows.Media.SolidColorBrush(color);
                TxtBx_Num_DSF.Background = new System.Windows.Media.SolidColorBrush(color);
                TxtBx_Indice.Background = new System.Windows.Media.SolidColorBrush(color);
                TxtBx_Contrat.Background = new System.Windows.Media.SolidColorBrush(color);
                TxtBx_Affaire.Background = new System.Windows.Media.SolidColorBrush(color);
                TxtBx_Redacteur.Background = new System.Windows.Media.SolidColorBrush(color);
                TxtBx_Verificateur.Background = new System.Windows.Media.SolidColorBrush(color);
                DtPck_Date.Background = new System.Windows.Media.SolidColorBrush(color);
                Bttn_Parcourir.Background = new System.Windows.Media.SolidColorBrush(color);
                RdBttn_Yes.Background = new System.Windows.Media.SolidColorBrush(color);
                RdBttn_No.Background = new System.Windows.Media.SolidColorBrush(color);
                color = (Color)ColorConverter.ConvertFromString("#FF3B73B9");
                Bttn_Parcourir.Background = new System.Windows.Media.SolidColorBrush(color);
    
                if (TxtBx_Designation.Text == "")
                {
                    return_control_form++;
                    color = (Color)ColorConverter.ConvertFromString("#FFFFCCCC");
                    TxtBx_Designation.Background = new System.Windows.Media.SolidColorBrush(color);
                }
                if (TxtBx_Client.Text == "")
                {
                    return_control_form++;
                    color = (Color)ColorConverter.ConvertFromString("#FFFFCCCC");
                    TxtBx_Client.Background = new System.Windows.Media.SolidColorBrush(color);
                }
                if (TxtBx_Site.Text == "")
                {
                    return_control_form++;
                    color = (Color)ColorConverter.ConvertFromString("#FFFFCCCC");
                    TxtBx_Site.Background = new System.Windows.Media.SolidColorBrush(color);
                }
                if (TxtBx_Unit.Text == "")
                {
                    return_control_form++;
                    color = (Color)ColorConverter.ConvertFromString("#FFFFCCCC");
                    TxtBx_Unit.Background = new System.Windows.Media.SolidColorBrush(color);
                }
                if (TxtBx_Num_DSF.Text == "")
                {
                    return_control_form++;
                    color = (Color)ColorConverter.ConvertFromString("#FFFFCCCC");
                    TxtBx_Num_DSI.Background = new System.Windows.Media.SolidColorBrush(color);
                }
                if (TxtBx_Indice.Text == "")
                {
                    return_control_form++;
                    color = (Color)ColorConverter.ConvertFromString("#FFFFCCCC");
                    TxtBx_Indice.Background = new System.Windows.Media.SolidColorBrush(color);
                }
                if (TxtBx_Contrat.Text == "")
                {
                    return_control_form++;
                    color = (Color)ColorConverter.ConvertFromString("#FFFFCCCC");
                    TxtBx_Contrat.Background = new System.Windows.Media.SolidColorBrush(color);
                }
                if (TxtBx_Affaire.Text == "")
                {
                    return_control_form++;
                    color = (Color)ColorConverter.ConvertFromString("#FFFFCCCC");
                    TxtBx_Affaire.Background = new System.Windows.Media.SolidColorBrush(color);
                }
                if (TxtBx_Redacteur.Text == "")
                {
                    return_control_form++;
                    color = (Color)ColorConverter.ConvertFromString("#FFFFCCCC");
                    TxtBx_Redacteur.Background = new System.Windows.Media.SolidColorBrush(color);
                }
                if (TxtBx_Verificateur.Text == "")
                {
                    return_control_form++;
                    color = (Color)ColorConverter.ConvertFromString("#FFFFCCCC");
                    TxtBx_Verificateur.Background = new System.Windows.Media.SolidColorBrush(color);
                }
                if (DtPck_Date.Text == "")
                {
                    return_control_form++;
                    color = (Color)ColorConverter.ConvertFromString("#FFFFCCCC");
                    DtPck_Date.Background = new System.Windows.Media.SolidColorBrush(color);
                }
                if (TxtBlck_URL_DSF.Text == "")
                {
                    return_control_form++;
                    color = (Color)ColorConverter.ConvertFromString("#FFFFCCCC");
                    Bttn_Parcourir.Background = new System.Windows.Media.SolidColorBrush(color);
                }
                if (RdBttn_Yes.IsChecked == false && RdBttn_No.IsChecked == false)
                {
                    return_control_form++;
                    color = (Color)ColorConverter.ConvertFromString("#FFFFCCCC");
                    RdBttn_Yes.Background = new System.Windows.Media.SolidColorBrush(color);
                    RdBttn_No.Background = new System.Windows.Media.SolidColorBrush(color);
                }
                return return_control_form;
            }
    
            // Vérification si le fichier est accepté
            int Control_Fichier()
            {
                int control_DSF;
                int extension_DSF;
                string selected_DSF;
                return_control_fichier = 0;
                selected_DSF = TxtBlck_URL_DSF.Text;
                control_DSF = selected_DSF.IndexOf("DSI");
                extension_DSF = selected_DSF.IndexOf(".xlsx");
                if (TxtBlck_URL_DSF.Text != "" && control_DSF < 0 | extension_DSF < 0)
                {
                    return_control_fichier++;
                }
                return return_control_fichier;
            }
    
            // Vérification si la date n'est pas dans le passée
            int Control_Date()
            {
                return_control_date = 0;
                Color color = (Color)ColorConverter.ConvertFromString("#FFFFFFFF");
                DtPck_Date.Background = new System.Windows.Media.SolidColorBrush(color);
                DateTime thisDate = DateTime.Today;
                if (return_control_fichier == 0 && return_control_form == 0 && DtPck_Date.SelectedDate < thisDate)
                {
                    return_control_date++;
                    color = (Color)ColorConverter.ConvertFromString("#FFFFCCCC");
                    DtPck_Date.Background = new System.Windows.Media.SolidColorBrush(color);
                }
                return return_control_date;
            }
    
            // Ouverture du fichier Excel et lecture du contenu
            private void OuvertureLectureXLS()
            {
                Excel.Application xlApp;
                Excel.Workbook xlWorkBook;
                Excel.Worksheet xlWorkSheet;
                Excel.Range range;
    
                string str;
                int rCnt = 0;
                int cCnt = 0;
                //OpenFileDialog OpenFileDialog1 = new OpenFileDialog();
                //OpenFileDialog1.Filter = "Excel files (*.xls*)|*.xls*;";
                //OpenFileDialog1.ShowDialog();
                if (TxtBlck_URL_DSF.Text != String.Empty)
                {
                    xlApp = new Excel.Application();
                    xlWorkBook = xlApp.Workbooks.Open(TxtBlck_URL_DSF.Text, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
                    xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item("FABRICATION");
                    range = xlWorkSheet.UsedRange;
                    cCnt = 1;
                    for (rCnt = 4; rCnt <= range.Rows.Count; rCnt++)
                    {
                        for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++)
                        {
                            str = Convert.ToString((range.Cells[rCnt, cCnt] as Excel.Range).Value2);
                            if (str != null)
                            {
                                // On renmplacera le message ci-dessous pas les fonctions
                                // Connection à la base de donnée et
                                // Suppression des anciennes données et enregistrement des nouvelles
                                MessageBox.Show(str);
                            }
                        }
                    }
                    xlWorkBook.Close(true, null, null);
                    xlApp.Quit();
                    ReleaseObject(xlWorkSheet);
                    ReleaseObject(xlWorkBook);
                    ReleaseObject(xlApp);
                }
            }
    
            // Fermeture Excel
            private void ReleaseObject(object obj)
            {
                try
                {
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                    obj = null;
                }
                catch (Exception ex)
                {
                    obj = null;
                    MessageBox.Show("Unable to release the Object " + ex.ToString());
                }
                finally
                {
                    GC.Collect();
                }
            }
    
            // Connection à la base de donnée
            public class BloggingContext : DbContext
            {
                public DbSet<Blog> Blogs { get; set; }
                public DbSet<Post> Posts { get; set; }
    
                protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
                {
                    optionsBuilder.UseSqlServer(
                        @"Server=(localdb)\mssqllocaldb;Database=Blogging;Integrated Security=True");
                }
            }
    
            public class Blog
            {
                public int BlogId { get; set; }
                public string Url { get; set; }
                public int Rating { get; set; }
                public List<Post> Posts { get; set; }
            }
    
            public class Post
            {
                public int PostId { get; set; }
                public string Title { get; set; }
                public string Content { get; set; }
    
                public int BlogId { get; set; }
                public Blog Blog { get; set; }
            }
        }
    }
    

    Si une âme charitable pouvais m'aider à me connecter a cette base de donnée et m'expliquer aussi comment enregistrer une entrée dedans, je lui serais très reconnaissant.

    Merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
      15 mars 2021 à 11:59:23

      a priori, il faudrait installer le package "Microsoft.EntityFrameworkCore.SqlServer" via nugget https://github.com/dotnet/efcore/issues/7891
      • Partager sur Facebook
      • Partager sur Twitter
        15 mars 2021 à 13:55:16

        arff, merci umfred.

        J'avais bien vue ca mais j'avais mal regardé dans nugget et je ne l'avais pas trouvé.

        L'erreur n'apparait plus. merci

        Par contre, je voudrais être sure de comprendre puisque j'ai fait beaucoup de copié-collé

        Dans public class BloggingContext : DbContext, on créer la connexion et les tables blog et post ?

        puis dans public class Blog et Post , on créer les entrées des tables ? 

        Enfin, quels conseils pourrais tu me donner pour la suite de mon projet ?

        • Partager sur Facebook
        • Partager sur Twitter

        C# Connection à une base de donnée SQL Localdb

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown