2010-10-19 5 views
2

J'ai beaucoup de feuilles Excel dont les colonnes sont légèrement différentes, je veux importer toutes ces feuilles (une à la fois) dans ONE SQL TABLE. Je vais donner un exemple:Plusieurs feuilles Excel différentes dans une table SQL

Dire ive a écrit le programme requis et l'a appelé convertisseur Excel2sql. Alors Excel2sql prend une feuille Excel et créer une table de base de données avec les données de cette feuille Excel, par exemple dire que j'ai la feuille Excel suivante:

Excel_Sheet_1 
----------------------------- 
FirstName MiddleName LastName 
John  A.   Smith 

quand je lance Excel2sql (Excel_Sheet_1), une table de base de données devrait être CRÉÉ pour moi avec les données suivantes en elle:

FirstName MiddleName LastName 
John  A.   Smith 

maintenant, quand je lance mon programme à nouveau avec la feuille Excel suivante:

Excel_Sheet_2 
----------------------------- 
LastName FirstName MiddleName 
wolf  Kerry   M. 

i doit obtenir les éléments suivants UP DAT table db:

FirstName MiddleName LastName 
John  A.   Smith 
Kerry  M.   wolf 

Notez qu'il a ajouté les données de la feuille Excel 2 dans la table de base de données existante. Il a fait une sorte de correspondance entre les colonnes de db et les colonnes de la feuille Excel 2 pour ajouter les données de manière appropriée.

Maintenant, si je lance à nouveau mon programme avec la feuille Excel suivante:

Sheet 3 
-------- 
PhoneNumber LastName MiddleName FirstName 
232-232  Lame  K.  Phoebe 

je devrais obtenir la table db suivante:

FirstName MiddleName LastName PhoneNumber 
John  A.   Smith  Null 
Kerry  M.   wolf  Null 
Phoebe K.   Lame  232-232 

Je veux que le code pour le faire de façon dynamique, i Par exemple, n'importe qui peut utiliser mon code, lui donner une feuille Excel comme entrée, mon code va alors créer pour lui une table de données sql et chaque fois qu'un utilisateur lui donne une feuille excel, il devrait mettre à jour la table sql déjà créée.

S'il vous plaît j'ai vraiment besoin de toute l'aide que je peux obtenir. Im très nouveau à ceci. J'ai écrit un code primitif qui télécharge simplement une feuille Excel dans une base de données déjà existante. (Ce qui est pas ce que je veux, mais je devais commencer quelque part)

using System; 
using System.Collections; 
using System.Configuration; 
using System.Data; 
using System.Data.OleDb; 
using System.Data.SqlClient; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Linq; 
public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void insertdata_Click(object sender, EventArgs e) 
    { 
     //-----------------connection to excel=-------------------------- 
     OleDbConnection oconn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("example.xls") + ";Extended Properties=Excel 8.0"); 
     try 
     { 
      //-----------------Commad to get all columns--------------------- 
      OleDbCommand ocmd = new OleDbCommand("select * from [Sheet1$]", oconn); 

      //-----------------open the connection----------------------- 
      oconn.Open(); 

       //-----------------execute the command ---------------------- 
      OleDbDataReader odr = ocmd.ExecuteReader(); 
      string fname = ""; 
      string lname = ""; 
      string mobnum = ""; 

       //-----------------read from the datareader------------------- 
      while (odr.Read()) 
      { 

        //-----------------insert into the db table ------------------ 
       insertdataintosql(fname, lname, mobnum); 
      } 
      oconn.Close(); 
     } 
     catch (DataException ee) 
     { 
      lblmsg.Text = ee.Message; 
      } 
     finally 
     { 
      lblmsg.Text = "Data Inserted Sucessfully"; 
     } 
    } 

    public void insertdataintosql(string fname, string lname, string mobnum) 
    { 
     //-----------------connection to sql database---------------- 

     SqlConnection conn = new SqlConnection("Data Source=.\\sqlexpress;AttachDbFileName=|DataDirectory|exceltosql.mdf;Trusted_Connection=yes"); 


     SqlCommand cmd = new SqlCommand(); 
     cmd.Connection = conn; 
     cmd.CommandText = "insert into dbtable(fname,lname,mobnum) values(@fname,@lname,@mobnum)"; 
     cmd.Parameters.Add("@fname", SqlDbType.NVarChar).Value = fname; 
     cmd.Parameters.Add("@lname", SqlDbType.NVarChar).Value = lname; 
     cmd.Parameters.Add("@mobnum", SqlDbType.NVarChar).Value = mobnum; 

     cmd.CommandType = CommandType.Text; 
     conn.Open(); 
     cmd.ExecuteNonQuery(); 
     conn.Close(); 
    } 

} 

Encore une fois le ive code écrit est pas ce que je veux, pouvez-vous s'il vous plaît me aider à le modifier pour obtenir les exigences que je veux!

Merci d'avance :)

Répondre

0

Tout d'abord, vous rendre la vie un peu plus facile sur vous-même si vous créez une table contenant un minimum, disons, juste une colonne RowID. De cette façon, vous évitez la casse de devoir créer la table sur le premier passage. Ou, vous pourriez le faire sur le premier passage, et présenter le premier groupe de colonnes en utilisant ALTER TABLE ..., le même que tout autre passage.

L'étape suivante consiste à interroger les métadonnées dans sysobjects et syscolumns pour déterminer quelles colonnes ne sont pas déjà présentes et à les ajouter avec ALTER TABLE ....

La troisième étape consiste à lire la ligne de titre et à l'utiliser pour générer l'instruction SQL. Utilisez @ _1, @ _2 comme noms de paramètre pour éviter d'avoir à mémoriser les noms dans l'étape finale.

Enfin, passez en revue les lignes restantes. Pour chaque ligne, lier les cellules au paremètre correspondant puis exécuter l'instruction.

0

Tout d'abord, merci beaucoup d'avoir répondu!

laissez-moi voir si je suis ce que vous avez dit:

si sheet1 qui a les colonnes ABCD, quand je lance le code, je vais avoir une table SQL qui contient les colonnes ABCD

alors si i une autre feuille qui contient les colonnes ABCDE, je vais faire ce qui suit:

étape 0: obtenir toutes les colonnes noms de ma table existante (dans ce cas ABCD)

étape 1: lire les lignes d'en-tête de la feuille Excel (ABCDE)

étape 2 a) comparer le résultat de l'étape 0 et l'étape 1 étape 2 b) obtenir les colonnes noms qui sont absents de ma table sql et les ajouter à ce (
dans cette colonne de cas E) afin après l'avoir ajouté à la table, ma table sql aura les colonnes ABCDE

mais je ne comprenais pas ce que vous vouliez dire lorsque u dit ce qui suit:

# la troisième étape est de lire la ligne de titre et de l'utilisation pour construire l'instruction SQL. Utilisez @ _1, @ _2 comme noms de paramètre pour éviter d'avoir à mémoriser les noms dans l'étape finale.

Enfin, passez en revue les lignes restantes. Pour chaque ligne, lier les cellules au paremètre correspondant puis exécuter l'instruction. # encore j'apprécie vraiment votre aide :) :)

Questions connexes