2010-04-23 4 views

Répondre

3

vous pouvez le faire rapidement en utilisant SqlBulkCopy:

http://www.dotnetcurry.com/ShowArticle.aspx?ID=323

Nous l'utiliser pour importer un ensemble de données d'environ 100 000 enregistrements dans une table SQL en quelques secondes, où 100.000 instructions d'insertion a pris 15 minutes.

+0

C'est la voie à suivre, pour sûr! –

+1

SqlBulkCopy est sérieusement l'un des adaptateurs les plus sous-estimés dans l'espace de noms SqlClient - il est rapide comme l'éclair d'importer de grandes quantités de données. – SqlRyan

-2

Vous ne pouvez pas le faire par lots à partir du code C#. 2000 lignes seront faciles à insérer si.

Une option peut être disponible si vous avez les 2000 enregistrements dans un fichier plat, vous pouvez le copier sur le serveur SQL et créer SP à BULK INSERT le fichier dans une table. Puis appelez le SP à partir de votre code C#. Je ne voudrais pas déranger à moins que vous voyez avoir plus de lignes que cela et si vous avez une énorme table cible.

+0

Qu'en est-il de SqlBulkCopy ?? –

+4

Ceci est ** pas vrai **. .NET inclut la très puissante classe ** SQLBulkCopy ** qui est ** LE ** moyen le plus rapide d'insérer des données dans une base de données SQL. – ntziolis

0

Eh bien, vous pourriez construire une requête qui a plusieurs inserts en elle:

string sql = "INSERT INTO table (col1, col2) values (@val1,@val2);" + 
      "INSERT INTO table (col1, col2) values (@val3,@val4);" 

Mais le traitement des paramètres de la commande obtiendrait un peu délicat.

Vous pouvez également utiliser DataAdapters and DataTables to do batch inserts. Ce serait probablement la meilleure option, bien que l'utilisation soit un peu étrange (pas aussi belle que addBatch()/executeBatch() de Java par exemple).

Performance sage, vous aurez certainement obtenir un bon coup de pouce de la performance en faisant cela, bien que vous pourriez avoir besoin de jouer avec la taille du lot un peu pour comprendre ce qui fonctionne le mieux

+0

Je ne pense pas que cela aidera beaucoup, surtout si on le compare aux performances de SqlBulkCopy .... –

+0

@marc_s - J'ai trouvé la performance assez bonne, mais je n'ai jamais essayé SqlBulkCopy non plus. –

Questions connexes