2010-06-01 26 views
4

J'ai une exigence que j'ai besoin de lire une feuille Excel en utilisant asp.net/C# et insérer tous les enregistrements dans la table mysql.La feuille excel se compose d'environ 2000 lignes et 50 colonnes. Actuellement, en lisant les enregistrements Excel, j'insère les enregistrements un par un en utilisant une instruction de préparation dans la table mysql. Mais cela prend environ 70 secondes pour le faire à cause des énormes données. J'ai aussi pensé à créer un nouveau datarow, en assignant des valeurs à chaque cellule, en ajoutant la datarow résultante à datatable et enfin en appelant dataadapter.update (...). Mais ça semble être complexe parce que j'ai environ 50 colonnes et donc je vais devoir assigner 50 valeurs à la datarow.Comment insérer des données en bloc dans la table mysql d'asp.net à la fois

Quelqu'un pourrait-il suggérer s'il y a un remplaçant pour améliorer la performance de l'insertion?

Merci

Répondre

2

MySQL LOAD DATA INFILE est semblable au BULK INSERT de MS SQL et qui va vous donner les meilleures performances. Vous pouvez concaténer votre fichier texte tout en faisant défiler les cellules Excel, mais pour plus de gain de performances, essayez d'exporter le fichier depuis Excel en une seule fois - je ne suis pas sûr de la manière dont vous devez affiner le fichier d'exportation (délimiteurs , etc.)

EDIT:

Ou, si vous n'avez pas l'estomac/temps d'essayer quelque chose comme ça, passer au moins autant de lignes de valeurs dans une seule instruction INSERT que vous pouvez:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9); (également depuis le site MySQL)

Je ne sais pas si 5000 est au-dessus de la limite théorique - probablement? - Il suffit donc d'assembler peut-être 100 insertions par énoncé, puis de l'exécuter. En tout état de cause, l'approche à un seul insert par commande est ce qui vous coûte.