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 :

Enregistrement des données dans une base de données sql server [Débutant]


Sujet :

C#

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2015
    Messages : 16
    Points : 9
    Points
    9
    Par défaut Enregistrement des données dans une base de données sql server
    Bonjour tt le monde,

    Je suis débutante en c# et j'utilise Visual Studio 2010, et j'ai une application winform où je charge mes données à partir d'un fichier excel dans un datagridview (Etape que j'ai réussi à faire). Maintenant, je veux enregistrer ces données dans une table de ma base de données sql server (que j'ai créer sur Visual Studio déjà). Le problème que j'ai pas su comment faire cette deuxième étape. Est-ce que vous pouvez m'aider SVP? Je serai très reconnaissante.

    Ici, je vous mets le code avec lequel j'ai remplis mon datagridview:
    Code de chargement des données :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    using System.Data.OleDb;
     
    namespace projetBE
    {
        public partial class Form1 : Form
        {
     
            public Form1()
            {
     
                InitializeComponent();
            }
     
            private void openFileButton_Click(object sender, EventArgs e)
            {
                openFileDialog1.ShowDialog();
            }
     
            private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
            {
                string filePath = openFileDialog1.FileName;
                string extension = Path.GetExtension(filePath);
                string Excel03ConString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR={1}'";
                string Excel07ConString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR={1}'";
                string header = rbHeaderYes.Checked ? "YES" : "NO";
                string conStr;
     
                conStr = string.Empty;
                switch (extension)
                {
     
                    case ".xls": //Excel 97-03
                        conStr = string.Format(Excel03ConString, filePath, header);
                        break;
     
                    case ".xlsx": //Excel 07
                        conStr = string.Format(Excel07ConString, filePath, header);
                        break;
                }
     
                //Get all worksheet names from the Excel file selected using GetSchema of an OleDbConnection
                OleDbConnection connection = new OleDbConnection(conStr);
                connection.Open();
                DataTable tables = connection.GetSchema("Tables", new String[] { null, null, null, "TABLE" });
                connection.Dispose();
     
               //Add each table name to the combo box
               if (tables != null && tables.Rows.Count > 0)
               {
                  worksheetsComboBox.Items.Clear();
                  foreach (DataRow row in tables.Rows)
                  {
                    worksheetsComboBox.Items.Add(row["TABLE_NAME"].ToString());
                  }
               }
               }
     
            private void worksheetsComboBox_SelectedIndexChanged(object sender, EventArgs e)
            {
                //Display the data from the selected Worksheet
                string filePath = openFileDialog1.FileName;
                string extension = Path.GetExtension(filePath);
                string Excel03ConString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR={1}'";
                string Excel07ConString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR={1}'";
                string header = rbHeaderYes.Checked ? "YES" : "NO";
                string conStr;
     
                conStr = string.Empty;
                switch (extension)
                {
     
                    case ".xls": //Excel 97-03
                        conStr = string.Format(Excel03ConString, filePath, header);
                        break;
     
                    case ".xlsx": //Excel 07
                        conStr = string.Format(Excel07ConString, filePath, header);
                        break;
                }
     
                OleDbDataAdapter adapter = new OleDbDataAdapter(String.Format("SELECT * FROM [{0}]", worksheetsComboBox.SelectedItem.ToString()), conStr);
                DataTable currentSheet = new DataTable();
                adapter.Fill(currentSheet);
                adapter.Dispose();
     
                excelDataGridView.DataSource = currentSheet;
     
            }
     
            }
        }
    ---------
    J'explique un peu le code:
    A chaque fois je charge mon fichier excel ce code me permet de récupérer les noms de mes feuilles excel et de parcourir ces différentes feuilles via un Combo Box et avec un click sur le nom de la feuille j'obtient mes données sur le datafridview.

    Voilà mon pb, j'éspère que vous pouvez m'aider.

    Merci d'avance.

    Cordialement,

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    On trouve de nombreuse réponses en cherchant sur Google "create database table from datatable c#".

    Si la table est déjà créée, on se limitera à l'écriture des données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void BulkInsertData(DataTable table)
            {
              SqlBulkCopy blkCopy = new SqlBulkCopy(@"server=TheServerName;uid=TheUid;"+
                                           @"pwd=ThePassword;database=TheDatabaseName",SqlBulkCopyOptions.KeepIdentity);
               blkCopy.DestinationTableName = table.TableName;
               blkCopy.WriteToServer(table);
               blkCopy.Close();
            }
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2015
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Merci pour votre réponse. Oui la table est déjà créée. Je veux essayer ce bout de code.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 39
    Points : 33
    Points
    33
    Par défaut
    Up !

    Des nouvelles ?

    Sinon, pourquoi ne pas utiliser une base de données "externe" ? (wampserver / MySql Workbench / autre) Pour une utilisation future et même en important ton .csv dans ta BDD ?

    Tanaes.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2015
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Ce travail est dans le cadre d'un projet d'entreprise, donc ils exigent l'utilisation de sql server.

    Cordialement,

  6. #6
    Membre actif
    Homme Profil pro
    Developpeur
    Inscrit en
    Février 2013
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Février 2013
    Messages : 180
    Points : 271
    Points
    271
    Par défaut
    Bonjour,

    Puisque tu as déjà un datatable tout fait, tu vas pouvoir l'insérer directement

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SqlDataAdapter adapter = new SqlDataAdapter())
    adapter.Update(monDataTable);

    par contre ça ne marchera pas comme ça, il va falloir commencer par la connexion à ton serveur MSSQL
    pour ça tu trouvera des exemple à foison sur le net.

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2015
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Merci pour votre réponse. En fait j'ai essayer les deux méthodes celle de bulkCopy et de l'adapter mais il m'affiche tjrs le message d'erreur:

    Cannot open database "AxisBase" requested by the login. The login failed.
    Login failed for user 'HP-PC\HP'.


    Malgré que j'ai tester ma connexion à ma base de données et elle fonctionne très bien!! Je comprend pas où est le pb?! Pourriez-vous m'aidez SVP? et merci d'avance.

    Je vous mets le code que j'ai utilisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Copy the DataTable to SQL Server
     
                    SqlConnection con = new SqlConnection();
                    con.ConnectionString = "Data Source = .\\SQLEXPRESS; Initial Catalog=AxisBase; Trusted_Connection=Yes";
                    con.Open();
                    MessageBox.Show("Vous êtes connecté");
                    SqlDataAdapter Monadapter = new SqlDataAdapter();
                    DataTable Donnees = new DataTable("Donnees");
                    Monadapter.Update(Donnees);
                    con.Close();
    et pour la méthode de bulkCopy:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     // Copy the DataTable to SQL Server
                using(SqlConnection con = new SqlConnection("Data Source = .\\SQLEXPRESS; Initial Catalog=AxisBase; Trusted_Connection=Yes; Connection Timeout=60;Min Pool Size=2;Max Pool Size=20;"))
                {
                    con.Open();
                    using (SqlBulkCopy s = new SqlBulkCopy(dbConnection))
                    {
                        s.DestinationTableName = Donnees.TableName;
                        foreach (var column in Donnees.Columns)
                            s.ColumnMappings.Add(column.ToString(), column.ToString());
                        s.WriteToServer(Donnnes);
                    }
                }

  8. #8
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    j'ai tester ma connexion à ma base de données et elle fonctionne très bien!!
    Avec quelle connectionstring ?

    Que se passe-t'il comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    using (SqlBulkCopy s = new SqlBulkCopy("Data Source = .\\SQLEXPRESS; Initial Catalog=AxisBase;  Trusted_Connection=Yes;"+
                                                       "Connection Timeout=60;Min Pool Size=2;Max Pool  Size=20;"))
    ...
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2015
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Bonjour et désolée pour répondre assez tard, en fait j'ai essayé avec les chaines pour le bulkCopy et c'est tjrs le même message d'erreur: "Login failed for this user "HP-PC"" malgé que si je me connecte à la base (soit avec e code soit via "Ajouter de nouvelles sources de données") il y a tjrs connexion. Voilà, le code de connexion:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SqlConnection con = new SqlConnection();
                con.ConnectionString = "Data Source = .\\SQLEXPRESS; Initial Catalog=MyBase; Trusted_Connection=Yes";
                con.Open();
                MessageBox.Show("Vous êtes connecté"); 
     
                con.Close();
    Dés que j'ajoute un autre code à celui dessus, il m'affiche le message d'erreur!! Franchement j'ai pas même compris l'origine de cet faute. Quelqu'un peut m'aider SVP!!

    Cordialement,

  10. #10
    Futur Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2015
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    J'ai résolu mon pb, j'ai oublié d'ajouter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    using Microsoft.SqlServer.Management.Smo;
    using Microsoft.SqlServer.Management.Common;

    Merci pour tt le monde pour votre aide.

    Cordialement,

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

Discussions similaires

  1. enregistrer des images dans une base de donnée
    Par nabil123456 dans le forum Interfaces Graphiques en Java
    Réponses: 0
    Dernier message: 22/04/2015, 12h47
  2. [MySQL] enregistrer des info dans une base de données a partir d'un site internet HTML
    Par coralieD dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 14/01/2015, 15h23
  3. Enregistrer des valeurs dans une base de donnée SQL
    Par MoTaWer dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 11/05/2011, 14h16
  4. Réponses: 5
    Dernier message: 10/01/2008, 08h47
  5. Réponses: 4
    Dernier message: 26/09/2006, 11h42

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