2009-10-15 3 views
0

Je suis encore en train d'apprendre beaucoup de choses sur la programmation, cela peut être une question évidente mais je suis en train d'écrire un programme où un utilisateur peut importer un fichier Excel sans contrainte de colonne. ce qui signifie que chaque fichier Excel pourrait avoir un nombre différent de colonnes et ainsi de suite). Ce que je veux faire, c'est être capable de convertir le fichier Excel importé dans une table de base de données en utilisant SQLite. Pour autant que j'ai lu la syntaxe pour SQLite est la même que la syntaxe ADO mais je ne suis pas sûr de la façon de créer dynamiquement les tables dans la base de données. Je suis à la recherche de toute forme de suggestion, si quelqu'un avait envie de montrer un exemple de code qui serait cool.C# Ajouter dynamiquement des colonnes à la table dans la base de données

Merci! Nathan

+0

Est-il possible de se pencher sur une autre solution. Créer une table pour chaque fichier chargé est une mauvaise idée, pensez à avoir 10000 de tables. –

Répondre

6

Voici un morceau de code pour créer une table SQLite:

SQLiteConnection mDBcon = new SQLiteConnection(); 
mDBcon.ConnectionString = "Data Source=" + DataSourcePath; 
mDBcon.Open(); 
SQLiteCommand cmd = new SQLiteCommand(mDBcon); 
cmd.CommandText = "CREATE TABLE IF NOT EXISTS tags (ISBN VARCHAR(15), Tag VARCHAR(15));"; 
cmd.ExecuteNonQuery(); 

Notez que dans SQLite vous ne pouvez ajouter coloumn aux tables existantes, et seulement à la fin de la table:

cmd.CommandText = "ALTER TABLE books ADD COLUMN PublishDate DateTime;"; 
cmd.ExecuteNonQuery(); 

Addition

en supposant que vous vous avez importé des données de Excel à un DataSet, vous pouvez maintenant ite taux par les DataTables du DataSet, créez les tableaux correspondants et les remplir: (disclaimer, ont pas testé)

foreach(DataTable table in dataSet.Tables) 
{ 
    SQLiteCommand cmd = new SQLiteCommand(mDBcon); 
    cmd.CommandText = "CREATE TABLE IF NOT EXISTS " + table.Name + "("; 
    bool first = true; 
    foreach (DataColumn column in table.Columns) 
    {   
     cmd.CommandText += "@"+column.Name; 
     if (!first) cmd.CommandText += ","; 
     else first = false; 
     cmd.Parameters.Add(new SQLiteParameter("@"+column.Name, column.Name)); 
    } 
    cmd.CommandText += ");"; 
    cmd.ExecuteNonQuery(); 

    // Fill the new table: 
    SQLiteDataAdapter da = new SQLiteDataAdapter("select * from " + table.Name, mDBcon); 
    da.Fill(table); 
} 
+0

Ah je ne savais pas que vous deviez déjà faire une table, mais ce n'est pas un gros problème. Je suppose que mon principal problème est que je n'arrive pas à comprendre comment obtenir les noms de colonnes du fichier excel, obtenir leurs types associés et comment transformer cela en l'instruction Create Table. Si je transforme l'importation en un ensemble de données, puis-je utiliser le schéma de jeu de données comme schéma de table de base de données? – Nathan

+0

@Nathan: N'a pas utilisé l'ensemble de données pour importer des données dans sqlite, mais comme il a un support ADO complet, je suppose que vous le pouvez. – Amirshk

+0

Pouvez-vous donner un exemple de la façon dont je prendrais la colonne de l'ensemble de données et utiliserais ADO pour l'ajouter à l'instruction Create Table? – Nathan

Questions connexes