2009-11-11 7 views
1

J'ai vérifié quelques réponses mais je n'ai pas trouvé de détails spécifiques sur la façon de créer une table SQL en utilisant des métadonnées personnalisées (ou des colonnes d'un fichier CSV) qui sont téléchargées par un utilisateur via un fichier CSV. Une fonctionnalité disponible avec www.dabbledb.com, comme la création de base de données en ligne pour des informations personnalisées. Il s'agira d'une application Web .NET utilisant SQL Server 2005 ou 2008 comme db backend.Quelqu'un peut-il donner des conseils simples sur la façon de créer des tables SQL à la volée, en utilisant un fichier CSV téléchargé dans une application Web .NET?

Réjouissez-vous d'avoir de vos nouvelles.

Merci SA

Répondre

0

Si vous utilisez une base de données-valeur d'attribut d'entité, vous pouvez simplement ajouter les nouvelles colonnes dans la table d'attributs maître, liés à l'entité, puis juste attribuer des valeurs dans le attribut- table de valeur pour l'entité. Mais, si cela n'a pas de sens alors vous voudrez utiliser la commande ALTER TABLE et ajouter de nouvelles colonnes, mais si vous allez changer dynamiquement la structure de la table, alors vous pouvez envisager une structure de base de données EAV.

1

J'ai récemment travaillé sur quelque chose de très proche de vos besoins. Dans mon cas, les données de chaque ligne d'un fichier CSV chargé sur le serveur sont stockées en tant que 'blob'. J'ai utilisé le Lumen Works CSV reader pour analyser le fichier CSV téléchargé. Il a la capacité de lire les en-têtes de colonne, que vous pouvez supprimer des espaces et des colonnes de table de base de données SQL.

Hope this helps indyfromoz

0

Nous venons d'écrire un programme Perl qui lit le csv, analyse les données dans chaque colonne, tente d'abord de croire que la première ligne est les noms de colonnes, bricole alors une table créer déclaration et un tas d'insertions. Nous pouvons l'exécuter à partir d'un environnement de commande ou d'un appel système dans PHP.

0

Ceci est juste un exemple que je ferais cela (ce qui signifie qu'il est peut-être bug monté et mal ...)

fichier CSV:

Column:ColumnType:size:n, Column:Type:size:n, Column:Type:size:y 
C1Data, C2Data, C3Data 

Pseudo Code:

StringBuilder sql = new StringBuilder(); 
sb.append("CREATE TABLE " + someTableName+ "(" + Environment.NewLine); 
for(string s in csvlines) { 
if(first_line) { 

    // pull apart our columns 
    string[] cols = s.Split(new char[] { ',' }); 

    // iterate over the list of columns 
    for(string col in cols) { 

     // pull apart the column name, type, size and nullable flag 
     string[] ci = col.Split(new char[] { ':' }); 

     // add our column name and add the datatype 
     sb.Append("[" + ci[0] + "]" + " [" + ci[1] + "] "); 

     // only put a size if value greater than 0 
     if(ci[2] != "0") { 
     sb.Append("(" + ci[2] + ") "); 
     } 

     // put our NULLABLE flag on NULL columns only 
     if(ci[3] == "y") { 
     sb.Append("NULL," + Environment.NewLine); 
     } else { 
     sb.Append("NOT NULL," + Environment.NewLine); 
     } 
    } 

    // remember the above has a bug where the last column has a rouge , 
    sb.Append(")"); 
} else { 
    // create our insert statement and insert as appropriate 
} 
} 

Peut-être dégoûtant, peut-être sale, peut-être faire ce que vous avez besoin!

+0

Merci Gents..très utile, passera en revue avec mon développeur principal et essayer les options ci-dessus. –