Les bibliothèques pour ADO.NET rapidement en vrac insérer des données dans une base de données à partir d'un .fichier csv?
Je voudrais savoir si vous pouvez recommander toute avancée ADO.NET bibliothèques pour travailler avec des bases de données.
J'ai découvert que LINQ-to-Entités est idéal pour tirer des données de bases de données, mais pas du tout utile pour l'insertion de données dans des bases de données. Sa fonctionnalité manquante comme la rapide insertion en bloc, l'abattage de doublons, et la plupart des fonctionnalités avancées, vous pouvez réaliser avec pur SQL.
Donc: pouvez-vous recommander certains ADO.NET les bibliothèques qui offrent les sortes de fonctionnalités avancées que LINQ-to-Entités est manquant?
OriginalL'auteur Contango | 2011-02-19
Vous devez vous connecter pour publier un commentaire.
L'ADO.net SqlBulkCopy classe permet rapide, masse de de téléchargement d'enregistrements dans une table:
où est le csv partie de la réponse à la question?
Cela fonctionne vraiment comme un charme! Merci 🙂
OriginalL'auteur Tahbaza
Vous pouvez utiliser LINQ, Entity Data Reader à écrire un IEnumerable liste à une base de données en utilisant SQL de Copie en bloc derrière les coulisses. Vous pouvez utiliser cette bibliothèque d'importer les résultats d'une requête LINQ directement dans la base de données, parce que les résultats d'une requête LINQ sont IEnumerable.
Comme il y a LINQ-à-tout, cartes, vous pouvez faire des trucs comme utiliser la LINQ to CSV bibliothèque extraire les données d'un .fichier csv à l'aide d'une requête LINQ, puis le LINQ, Entity Data Reader en vrac écrire ces données directement dans la base de données.
Étude de cas:
Problème: lire un .fichier csv rapidement dans une base de données. La connexion à la base de données SQL via LINQ-to-Entitys à partir de C#.
Solution 1: Utilisation LINQ to CSV bibliothèque, construire une requête LINQ pour extraire les données que vous souhaitez, puis l'écrire en utilisant le standard de LINQ-to-Entité d'appel (ctx.AddObject(), ctx.SaveChanges(), etc). Durée: 30 secondes pour 20 000 dossiers, que LINQ qui finit par générer une requête pour chaque enregistrement unique (slooooow!!!!!).
Solution 2: Utilisation LINQ to CSV bibliothèque, construire une requête LINQ pour extraire les données que vous voulez dans un IEnumerable, utilisez LINQ, Entity Data Reader en vrac écrire ces données directement dans la table de données. Durée: 3 secondes de 20 000 enregistrements.
Solution 3: Utiliser une procédure stockée SQL "copie en bloc". Durée: 2 secondes de 20 000 enregistrements. Cependant, cette solution est très fragile car elle repose sur une procédure stockée, et SQL de copie en bloc n'est tout simplement pas compatible avec certains .formats de fichiers csv. De plus, cette méthode nécessite l'utilisation d'une table intermédiaire entre la cible réelle de la table et de la .fichier csv, pour traiter les fichier de mise en forme des questions et à contribuer à la normalisation.
Et de, voici le code source pour la solution n ° 2:
OriginalL'auteur Contango