2017-09-27 3 views
-3

Ayant importé des données d'une feuille de calcul Excel dans datagridview, je voudrais créer une table (déterminée par l'utilisateur dans les formulaires Windows) et l'insérer avec les noms de colonnes dans la nouvelle table le datagridview.Insérer de datagridview à SQL avec des noms de colonnes dynamiques

L'utilisateur peut également utiliser le "programme" pour insérer d'autres feuilles Excel dans d'autres bases de données.

Comment ajouter des noms de colonne dynamiquement qui ne sont pas prédéfinis et est défini par combien de colonnes se trouve dans la feuille de calcul Excel?

+0

Vous devez nous montrer ce que vous avez essayé jusqu'ici avec quel problème vous êtes confronté avec cela. –

+0

l'analyse des noms de colonne ne devrait pas être si mauvaise - vous devez élaborer sur le problème que vous rencontrez – BugFinder

+0

La tâche à accomplir est de créer une application d'importation pour la feuille de calcul Excel à importer dans la base de données SQL. Mais j'ai réussi à bien faire les choses. Je vais essayer de soumettre le code. –

Répondre

0

Mon but ici était de créer une application d'importation pour importer des feuilles de calcul Excel dans une base de données de serveur SQL. Le problème que j'ai rencontré est d'obtenir les colonnes de nombre que j'avais besoin d'insérer dans la base de données et de les nommer dynamiquement selon la feuille de calcul Excel.

L'application sera utilisée sur différentes feuilles de calcul et les noms de colonne ne doivent pas être codés en dur. C'est le code que j'ai utilisé qui a géré la dernière phase de l'application où toutes les données de la feuille de calcul sont insérées dans la base de données en SQL.

//Import Button 
    private void button5_Click(object sender, EventArgs e) 
    { 
     string createColumns = ""; 
     string columns = ""; 
     string rows = ""; 
     var grid = (DataTable)dataGridView3.DataSource; 
     for (int i = 0; i < grid.Columns.Count; i++) 
     { 
      if (i == grid.Columns.Count - 1) 
      { 
       createColumns += "[" + grid.Columns[i].ToString() + "] varchar(200) NULL"; 
       columns += "[" + grid.Columns[i].ToString() + "]"; 
      } 
      else 
      { 
       columns += "[" + grid.Columns[i].ToString() + "],"; 
       createColumns += "[" + grid.Columns[i].ToString() + "] varchar(200) NULL,"; 
      } 

     } 
     string createTable = string.Format("Create table [{0}] ({1})", textBox1.Text, createColumns); 
     rows = string.Format("Insert Into[{0}]({1})", textBox1.Text, columns); 
     for (int i = 0; i < grid.Rows.Count; i++) 
     { 
      string row = ""; 

      for (int c = 0; c < grid.Columns.Count; c++) 
      { 

       if (c == grid.Columns.Count - 1) 
        row += "'" + grid.Rows[i][c].ToString() + "'"; 
       else 
        row += "'" + grid.Rows[i][c].ToString() + "', "; 
      } 

      if (i == grid.Rows.Count - 1) 
       rows += string.Format(" ({0});", row); 
      else 
      { 
       if (i == 0) 
       { 
        rows += " Values"; 
       } 
       rows += string.Format(" ({0}),", row); 
      } 
     } 
     string s = "Integrated Security = SSPI;Persist Security Info = False;Data Source = " + 
      ServerName.Text + "; Initial Catalog = " + 
      Databases.Text; 

     SqlConnection conn = new SqlConnection(s); 

     SqlCommand cmd = new SqlCommand(); 

     cmd.CommandText = createTable; 
     cmd.Connection = conn; 
     conn.Open(); 
     cmd.ExecuteNonQuery(); 
     conn.Close(); 

     SqlCommand cmd2 = new SqlCommand(rows, conn); 
     cmd2.CommandType = CommandType.Text; 
     conn.Open(); 
     cmd2.ExecuteNonQuery(); 
     conn.Close(); 

     Application.Exit(); 
    }