Télécharger le fichier CSV SQL server
Quelle est la meilleure façon de télécharger un grand csv
fichier de données dans SQL server à l'aide de C# ? Le fichier contient environ 30 000 lignes et 25 colonnes.
- pourquoi utiliser .net pour télécharger le fichier de sql server lui-même en charge l'importation de fichier CSV??
- SQL Server n'a pas toute installation de télécharger des fichiers, vous aurez besoin d'utiliser d'autres moyens (par exemple, un service web en cours d'exécution sur IIS ou quelque chose comme ça). SQL Server peut charger un fichier à partir d'un disque, il peut atteindre - de sorte que vous aurez besoin de trouver un moyen de mettre ce fichier sur lequel SQL Server peut lire de
- l'exigence est telle que nous avons une demande alors que l'on boucle et de télécharger les fichiers un par un une fois dans SQLserver donc j'ai besoin d'utiliser le c# code pour télécharger le fichier.
Vous devez vous connecter pour publier un commentaire.
1er arrêt, Vous n'avez pas besoin de programmation des trucs. Vous pouvez directement télécharger des fichiers CSV dans la Base de données SQL avec SQL outils de gestion. Toutefois, si vous avez vraiment besoin de le faire par le biais de la programmation, il suffit de lire ci-dessous.
Personnellement, je pense que cette approche est la plus efficace et la plus simple façon de le faire par le biais de la programmation.
En général, vous pouvez la réaliser en deux étapes
1er étape est de lire le fichier CSV et de tenir les registres comme
DataTable
.2e étape est de stocker l'extrait
DataTable
dans la Base de données SQL de la Table comme un bloc d'EntréeC'est une fonction qui renvoie le Fichier CSV de Données comme un
DataTable
. D'appel et de le Conserver dans la mémoire, et vous pouvez faire ce que vous voulez avec elle.Cette fonction va retourner Lire le fichier CSV dans DataTable.
SQLBulkCopy - Utilisez cette fonction pour insérer l'Extrait DataTable dans la Table Sql
Source
Microsoft.VisualBasic.FileIO does not exist
cliquez ce lien.La meilleure façon que j'ai trouvée pour l'importation de gros fichiers CSV dans SQL Server en utilisant
SqlBulkCopy
avecIDataReader
mise en œuvre. La bonne chose à ce sujet est que vous ne lisez pas l'intégralité du fichier en mémoire (ce qui est le cas à l'aide de DataTable approche) et vous pouvez contrôler la taille du lot, ce qui est envoyé à SQL Server. La mauvaise chose à propos de ce que vous avez à mettre en œuvreIDataReader
qui est l'une des plus longues MS interfaces que j'ai vu.J'ai écrit un package nuget qui fait le tour pour vous. Il utilise le génial CsvHelper paquet il y a donc très peu de config requise. Le scénario le plus simple serait ressembler à ceci:
Il ya aussi des options de configuration supplémentaires pour des scénarios plus complexes (flexible colonne de cartographie, d'autres statique de la colonne des valeurs qui ne sont pas présents dans le fichier csv, la transformation de la valeur).
Si vous êtes intéressés, le projet est sur Github et est disponible en package nuget.
Pour référence, voici comment utiliser
SqlBulkCopy
avecIDataReader
:Voici une autre façon de télécharger CSV de bases de données, via la programmation. Cinchoo ETL, une bibliothèque open source peuvent faire le travail de télécharger le fichier CSV de bases de données à l'aide de DataReader, qui est la diffusion d'approche avec peu à aucune surcharge de la mémoire.
Voici un exemple de comment le faire
load CSV with new headers dynamically to DB, create a new table with all the headers from the CSV
le code ci-dessus est d'aider avec cela, mais dans le même appel, je veux revenir un IList de la table, aussi à l'étape 2 comment puis-je obtenirnewTableName.toIList();
ce serait formidable si nous pouvions charge ainsi queUtilisation Système.Les données.SqlClient.SqlBulkCopy classe pour insérer des données dans des tables Sql.
L'utilisation de cette classe vous avez également besoin de les convertir en données CVS à DataTable, voir ici l'une des manières.
Cela sonne comme un travail parfait pour SSIS. C'est une partie libre de SQL Server, pouvez parcourir tous les fichiers csv dans un dossier, est très rapide, et a une excellente gestion des erreurs et journalisation.
Cette technique utilise la SQLBulkCopy() et de l'installation, mais ne lit pas l'intégralité du fichier en mémoire.
Le truc, c'est qu'elle met en œuvre un IDataReader classe pour lire la .fichier csv.
https://www.codeproject.com/Tips/1029831/Fast-and-Simple-IDataReader-Implementation-to-Read
Vous pouvez également utiliser
Bulk Insert
Être carfully ici, bien que depuis tablename et csv nom doit être identique ainsi que le nombre de colonnes du fichier csv doit être le même que dans le pré-définie de la table.