2010-08-26 3 views
1

Quelle est la manière la plus simple d'importer un fichier CSV dans une base de données via une application Web?Importer des données délimitées par des virgules dans le tableau de données

MISE À JOUR:

Petit exemple de CSV:

stop_id, stop_name, stop_desc, stop_lat, stop_lon, zone_id, stop_url 
TR, Trenton, , 40.2177778, -74.7550000, 6, 
LVTN, Levittown-Tullytown, , 40.1402778, -74.8169444, 5, 
BRST, Bristol, , 40.1047222, -74.8547222, 4, 
CROY, Croydon, , 40.0936111, -74.9066667, 4, 
EDGT, Eddington, , 40.0830556, -74.9336111, 4, 
CORN, Cornwells Heights, , 40.0716667, -74.9522222, 3, 
TORR, Torresdale, , 40.0544444, -74.9844444, 3, 
HOLM, Holmesburg Jct, , 40.0327778, -75.0236111, 2, 
+0

duplication possible de [Comment lire un fichier csv dans un .net datatable] (http://stackoverflow.com/questions/1050112/how-to-read-a-csv-file-into-a-net- datable) – Rob

+0

CSV est l'abréviation de "Comma Separated Values", qui est une autre façon de dire "Comma Delimited". Si vous êtes sûr que ce n'est pas le cas pour votre fichier texte, montrez-nous un échantillon du contenu de votre question =) Vous aurez également besoin d'être plus clair par ce que vous entendez par "importation directe". acceptable? – Rob

+0

Oh vrai non votre haha ​​droit. Mais la réponse ressemble à une insertion de page Web plutôt qu'une importation directe. Ou ai-je encore tort? – balexander

Répondre

1

Si vous prenez le Portable and Efficient Generic Parser for Flat Files et créer une nouvelle application console Visual C# qui a une référence à elle, le code suivant chargera le contenu d'un fichier CSV dans un DataTable:

using GenericParsing; 
using System.Data; 

namespace CsvToDataTable 
{ 
    public class Program 
    { 
     static void Main(string[] args) 
     { 
      var pathOfCsvFile = @"C:\MyFile.csv"; 
      var adapter = new GenericParsing.GenericParserAdapter(pathOfCsvFile); 
      DataTable data = adapter.GetDataTable(); 
     } 
    } 
} 

l'étape suivante consisterait à enregistrer les données data à votre serveur de base de données . Ce code suppose que la structure du fichier CSV correspond exactement que d'une table appelée TableName dans votre base de données:

private static void SaveDataToDatabase(DataTable data) 
{ 
    var connectionString = "CONNECTION STRING GOES HERE"; 
    var commandText = "INSERT INTO [databasename].[dbo].[TableName] " + 
     "(stop_id, stop_name, stop_desc, stop_lat, stop_lon, zone_id, stop_url) " + 
     "VALUES (@stop_id, @stop_name, @stop_desc, @stop_lat, @stop_lon, @zone_id, @stop_url)"; 

    using (var connection = new SqlConnection(connectionString)) 
    { 
     connection.Open(); 
     foreach (DataRow row in data.Rows) 
     { 
      using (var command = new SqlCommand(commandText, connection)) 
      { 
       command.Parameters.AddWithValue("@stop_id", row["stop_id"]); 
       command.Parameters.AddWithValue("@stop_name", row["stop_name"]); 
       command.Parameters.AddWithValue("@stop_desc", row["stop_desc"]); 
       command.Parameters.AddWithValue("@stop_lat", row["stop_lat"]); 
       command.Parameters.AddWithValue("@stop_lon", row["stop_lon"]); 
       command.Parameters.AddWithValue("@zone_id", row["zone_id"]); 
       command.Parameters.AddWithValue("@stop_url", row["stop_url"]); 

       command.ExecuteNonQuery(); 
      } 
     } 
    } 
} 

Vous voudriez ensuite ajouter un appel à SaveDataToDatabase dans votre méthode Main. Je pense qu'il y a assez de code ici pour que vous puissiez l'adapter à votre objectif.

+0

@Rob pourrait vous s'il vous plaît, si cela ne vous dérange pas. Je télécharge cet analyseur maintenant. Aussi, je sais que cela peut sembler stupide, mais après avoir ajouté le fichier .dll de référence dois-je placer le code ci-dessus dans un formulaire Web? Si ce n'est pas le type de fichier. – balexander

+0

@ Bry4n, ceci est pour une "Application Console". Vous pourriez le faire dans un WebForm si vous le vouliez, le principe global serait le même! =) – Rob

+0

@Rob Est-il plus facile de créer une application Web?Je pense que mon patron finirait par le demander dans une application web haha. Merci pour votre aide Rob. – balexander

0

qui va vraiment dépendre de votre situation. S'agit-il d'un fichier texte interne chargé dans SqlServer 2005 ou une base de données ultérieure (également interne)? Si c'est le cas, vous pouvez écrire un paquet SSIS (ou, plus simplement, utiliser l'assistant "Importer des données ..." de SQL Server) et il le lira juste pour vous.

Y a-t-il des raisons de s'inquiéter des virgules sans échappement (Dites une colonne Nom avec des formats de nom dans Dernier, Premier)? Ensuite, vous devrez compenser cela ... (nombreuses questions ici sur SO adresse ce même problème).

Le fichier n'est pas interne, c'est-à-dire que quelqu'un le télécharge et doit être lu en temps réel? Ensuite, un paquet SSIS est toujours votre meilleur pari, et mettre en place du code (les serveurs FTP modernes peuvent souvent appeler des exécutables ou des fichiers batch) pour lancer le paquet SSIS quand le fichier arrive.

C'est vraiment une très large genre de question, et sans plus de détails, je ne sais pas comment les réponses spécifiques que vous allez obtenir sera ...

+0

Je comprends qu'il était large. À l'heure actuelle, il sera interne, mais peut-être devenir en ligne et les gens vont simplement le télécharger pour mettre à jour les données. Ce qui signifie probablement que je devrais prendre cette route. Je ne crois pas que les virgules non échappées sont un problème. – balexander

Questions connexes