2009-10-27 6 views
0

Quelle est la meilleure méthode pour enregistrer des milliers de lignes et après avoir fait quelque chose, les mettre à jour.DataTable Update Problème

Actuellement, j'utiliser un datatable, le remplir, lorsque vous avez terminé l'insertion par

MyDataAdapter.Update(MyDataTable) 

Après avoir fait quelques changements sur MyDataTable, je l'utilise à nouveau la méthode MyDataAdapter.Update (MyDataTable).

Edit:

Je suis désolé de ne pas fournir plus d'informations.

Il peut y avoir jusqu'à 200 000 lignes qui seront créées à partir d'un fichier XML. Les lignes seront sauvegardées dans la base de données. Après, il y aura un processus pour chaque ligne. Et je devrai mettre à jour chaque ligne dans la base de données. Au lieu de mettre à jour rangée par ligne, j'ai décidé de mettre à jour la datatable et d'utiliser le même adaptateur de données pour mettre à jour les lignes.

C'est le meilleur de moi.

Je pense qu'il pourrait y avoir une approche plus intelligente.

+0

Il n'y a rien de mal à cela, avez-vous un problème spécifique? –

Répondre

1

Réagissant à vos commentaires:

Une DataAdapter.Update() rameront udate (et Insérer/Supprimer) par ligne. Si vous avez des changements individuels, il n'y a vraiment pas de moyen plus rapide. Si vous avez des changements systématiques, comme SET Price = Price+ 2 WHERE SelByDate < '1/1/2010' vous êtes mieux en exécutant un DbCommand contre la base de données. Mais peut-être que vous devriez vous soucier des transactions et de la gestion des erreurs avant les performances.

+0

@Henk Holterman: Mais j'utilise la propriété DataAdapter.UpdateBatchSize qui augmente la perfection. – JCasso

+0

OK, la définition de> 1 met à jour un lot de lignes, moins de temps système. Je ne pense pas que cela change le cœur de ma réponse. –

+0

@Henk Holterman, en fait je n'ai pas de mise à jour de masse. J'envoie des colonnes de chaque ligne à un webservice et le serveur m'envoie une valeur unique pour chaque requête, puis je la mets à jour. De toute façon, il semble qu'il n'y a pas de meilleure façon de le faire. – JCasso

1

Si je comprends bien, vous effectuez deux opérations distinctes: le chargement de lignes dans une base de données, puis la mise à jour de ces lignes. Si les lignes que vous insérez proviennent d'une autre source de données prise en charge par ADO.NET, vous pouvez utiliser SqlBulkCopy pour insérer les lignes dans les lots, ce qui sera plus efficace que d'utiliser une datatable.

Une fois que les lignes sont dans la base de données, je suppose que vous feriez mieux d'exécuter une commande SQLCommand pour modifier leurs valeurs.

Si vous pouvez fournir plus de détails sur ce - et pourquoi - vous posez la question alors peut-être que nous pouvons mieux adapter une réponse pour cela.

+0

En fait, le problème est de les mettre à jour. Je sauvegarde c'est ok. Mais je ne veux pas les mettre à jour un par un. Toutes les lignes insérées devront être mises à jour. Et j'ai vraiment besoin de les sauvegarder avant de les mettre à jour. – JCasso