Bonjour à tous,
Je travaille actuellement sur une application d'e-commerce. L'environnement est le framework .Net 2.0 couplé à une base en SQL server. Nous n'utilisons pas les procédures stockées ().
Chaque jour/semaine, notre client (le propriétaire du magasin) me donne un certain nombre de fichiers excel, dont je dois me servir pour mettre la base à jour (modifier les produits/clients/etc. modifiés et ajouter les nouveaux par exemple). Donc j'ai commencé à développer un service qui va chaque jour récupérer ces données, et dans un premier temps les importer dans des objets 'DataTable' (qui ne correspondent donc pas encore aux tables de la base de données). L'étape suivante, c'est de vérifier si ces données sont conformes (notre client étant un peu laxiste). J'en suis à peu près à là.
Comment procéder, en SQL ou en .Net, à la mise à jour de la base à partir de ces données locales ?
Je vois plusieurs méthodes. Mais soit elles ne me conviennent pas :
1- Effectuer une boucle pour chaque produit, vérifier dans la base s'il existe, si oui le mettre à jour (UPDATE), sinon l'insérer (INSERT). Selon moi c'est une mauvaise méthode, trop de requêtes SQL sont générées.
2- Récupérer en local l'intégralité des tables à modifier (loadDataSet), effectuer les modifications en local pour chaque produit à importer (modification ou ajout d'une DataRow), et appeler pour chaque table en fin de traitement un UpdateDataSet qui va effectuer les mises à jour. Selon moi, ce n'est pas une solution viable si les données sont trop nombreuses en base, et ça reste coûteux en temps.
Soit je ne sais pas comment les réaliser :
A- Récupérer en local uniquement les lignes qui vont être mises à jour (mais je ne sais même pas comment passer une liste d'id à ma requête pour qu'elle ne me retourne que ceux-là ) et effectuer le traitement en local comme dans la solution 2
B- Copier les données dans la base (table temporaire ou autre), et traitement dans la foulée effectué par un update/insert (suivant les cas...) en masse de ces données.
Auriez-vous une idée ? Ou une autre suggestion ?
Partager