Question

I avoir un fichier de format CSV avec 350.000 rangées, chaque rangée a environ 150 colonnes.

Quelle serait la meilleure façon d'insérer ces lignes dans SQL Server à l'aide ADO.Net?

La façon dont je l'ai fait habituellement il est de créer l'instruction SQL manuellement. Je me demandais s'il y a une façon que je peux le code pour insérer simplement l'ensemble datatable dans SQL Server? Ou un peu raccourci comme ça.

Par la façon dont je l'ai déjà essayé de faire cela avec SSIS, mais il y a quelques problèmes de données de nettoyage que je peux manipuler avec C #, mais pas si facilement avec SSIS. Les données a commencé comme XML, mais je l'ai changé au format CSV pour la simplicité.

Était-ce utile?

La solution

Faire une classe "CsvDataReader" qui implémente IDataReader. Il suffit de mettre en œuvre Read (), GetValue (int i), Dispose () et le constructeur: vous pouvez laisser le reste jeter NotImplementedException si vous voulez, parce que SqlBulkCopy ne sera pas les appeler. Utilisez lecture pour gérer la lecture de chaque ligne et GetValue à lire la i-ième valeur de la ligne.

Passez ensuite à la SqlBulkCopy avec les cartographies de colonnes appropriées que vous voulez.

Je reçois environ 30000 enregistrements / par seconde vitesse d'insertion avec cette méthode.

Si vous avez le contrôle du format de fichier source, faire délimité par des tabulations comme il est plus facile à analyser que CSV.

Edit: http://www.codeproject.com/KB/database/CsvReader .aspx -. tx Mark Gravell

Autres conseils

SqlBulkCopy si elle est disponible. Voici une explication très utile d'utiliser SqlBulkCopy dans ADO.NET 2.0 avec C #

Je pense que vous pouvez charger votre XML directement dans un DataSet puis votre carte SqlBulkCopy à la base de données et le DataSet.

Hey, vous devez revenir au format XML au lieu de csv, puis chargez le fichier xml dans une table temporaire en utilisant OpenXML, nettoyer vos données dans le tableau de température et traiter enfin ces données.

J'ai suivi cette approche pour l'importation massive de données où mes fichiers XML se trouvent être> 500 Mo en taille et OpenXML fonctionne comme un charme.

Vous seriez surpris de voir combien plus vite cela fonctionnerait par rapport aux états manuels de ADO.NET.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top