Et bien justement il ne faut pas le faire Côté code.
Pour résumer faire cela en utilisant LINQ(dans les grandes lignes):
->J'ouvre mon fichier ligne par ligne (déjà çà... ca doit faire tiquer un fichier peut se traiter de manière ensembliste par des requêtes SQL, ce que ne permet pas le code client)
Pour chaque ligne (disons des Utilisateur):
J'instancie mon objet monUser utilisateur via LINQ (un bon SELECT * du coups...)
Je fais mon test:
Si monUser est null j'instancie un nouvel objet pour faire mon insert...
Sinon je met à jour les données de l'objet instancié avec les données de ma ligne...
Je fais donc cela 15000 fois (15000 lignes dans le fichier)...
Et je fais un submitChanges qui va faire 15000 requêtes (INSERT ou UPDATE)
Donc:
1-Vous avez remonté 15000 lignes de la base de données.... une par une par le réseau (donc 15000 fois la latence réseau etc).
Vous avez instancé 15000 objets...
Et vous avez envoyé 15000 INSERT dans la base.
Du coups vous mettez 15000 fois à jour index et stats de votre table.
Importer les 15000 LIGNES du fichiers(BULK INSERT) dans une table (environ 2 secondes :-))
puis deux requetes:
INSERT INTO customer WHERE NOT EXISTS...
1 2 3 4 5 6 7
|
UPDATE C
SET C.colonneA=TT.colonneA,
C.colonneB=TT.colonneB
FROM customer C
INNER JOIN tableTemp TT
ON TT.code=C.code |
Donc deux requêtes seulement...
Ça réponds à votre question?
Donc deux
Partager