Problème : Temps d'execution de la commande OleDbDataAdapter.Update VB.Net

Dzvirfein Messages postés 4 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 18 octobre 2005 - 17 oct. 2005 à 14:34
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 - 18 oct. 2005 à 10:01
Alors pour vous expliquer mon problème,



J'utilise la technologie VB.Net et OleDb pour lire un fichier CSV et l'enregistrer dans une base de données ACCESS.



Voila l'execution de mon code :

(Fichier CSV de 30 000 lignes)



Je lis le fichier CSV et insère les données dans un DATASET. (10 secondes même pas) : Appelons le DataSetCSV



Je récupère un DataSet vide de la table de ma base de données et je
fais le lien entre les colonne du DataSet vide et le DataSetCSV (moins
de 30 secondes).



J'ai donc ici un DataSet avec le format de ma table contenant toutes les informations du fichier CSV



Et j'execute la commande suivantes afin d'inserer mes données dans la tables "CONSOS":

myOleDbDataAdapter.Update(myDataSetInsert, "CONSOS")



J'ai exécuté pas a ma mon code pour vous donner les temps d'execution
et cette derniere prends a elle seule 3 minutes !!!! et il n'y a encore
que 30 000 lignes a importer. Imaginez vous le temps que cela prendrai
avec un fichier de 900 000 lignes.

3 réponses

aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
17 oct. 2005 à 14:51
salut,

quel est ton SGBDR ?

tu as moyen d'inserer directement tes données en bloc, à partir de ton CSV.


est ce que ton appli va tourner sur le serveur de base de données ?


ou est-ce que le serveur sur lequel elle va tourner peut disposer d'un lecteur monté sur le serveur de base de données ?


si tu es sur SQL serveur, par exemple, tu peux faire un bulk insert, et la tes données vont etre en base avant que ais le temps de t'en rendre compte ! (pour info, je fait des bulk insert de fichier qui font autour de 500 000 lignes, ca prend eviron une minute !)


sinon je crois que sous oracle tu peux inserer plusieurs lignes en une seule commande SQL.

Ha oui j'oubliais, est-ce que tu as un trigger ou un index sur ta table cible ? le ralentissement peux venir de la. De Meme est ce que ton reseau est "rapide" ?
0
Dzvirfein Messages postés 4 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 18 octobre 2005
17 oct. 2005 à 15:04
Merci a toi de prendre le temps de répondre.



Mon SGBDR est ACCESS (imposé par le boulot hé oui :( ) et je n'ai donc aucun triggers.



Pour l'instant mon appli tourne uniquement en local (ma base de données est sur mon ordi, le fichier csv aussi)
0
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
18 oct. 2005 à 10:01
ok

si totu tourne en local, on peut en deduire que ce n'est pas un problème réseau (je suis vraiment trop fort :o) )

je ne connais pas trop access, mais je pense qu'il doit quand meme y avoir moyen d'importer directement des données. selon le format originla de ton CSV, il faudra peut etre que tu le traite (pour remttre les données dans le bon ordre ou au bon format), mais je pense que la solution sera quand meme nettement plus rapide.

si tu n'as pas de trigger, ce n'est pas cela qui ralenti, mais est-ce que tu as des index ?


les index peuvent ralentir fortement une commande INSERT, car le SGBDR doit recalculer l'index régulierement.


enfin sinon pour faire du bulk insert, sous access depuis VB je n'ai jamais fait, alors je vais avoir du mal a t'aider, mais il doit y avoir des sources sur le site surement ?!?
0
Rejoignez-nous