2009-09-01 7 views
-1
Dim sSelect As String = _ 
     "SELECT * FROM Contacts" & _ 
     " WHERE DataSetID = @DataSetID AND ID >= @FirstID AND ID <= @LastID ORDER BY ID" 


     Dim dsDBFiles As New DataSet() 
     Dim cmd As New SqlClient.SqlCommand(sSelect, m_connection) 
     cmd.Parameters.Add("@FirstID", SqlDbType.Int).Value = nFirstID 
     cmd.Parameters.Add("@LastID", SqlDbType.Int).Value = nLastID 

     Dim daTable As New SqlClient.SqlDataAdapter(cmd) 
     Dim bldr As New SqlClient.SqlCommandBuilder(daTable) 

     daTable.Fill(dsDBFiles, sTable) 
     Dim tbl As DataTable = dsDBFiles.Tables(sTable) 

     Dim rdr As New Data.DataTableReader(dsFiles.Tables(0)) 
     dsDBFiles.Load(rdr, LoadOption.Upsert, tbl) 

     daTable.Update(dsDBFiles, sTable) 

Existe-t-il un moyen d'atteindre cette fonctionnalité plus poussée sans récupérer les enregistrements? J'utilise SQL Server 2005. J'ai entendu dire qu'il existe un moyen d'utiliser sqladapter pour cela, sans exécuter l'instruction select. J'essaie d'accélérer ce processus. Aucune suggestion?Upsert avec .net sqladapter

Cheers.

+0

Quel est exactement votre problème? – gsharp

Répondre

0

La partie INSERTION est une chose - l'insertion de nouvelles lignes n'est pas un problème.

Si vous souhaitez mettre à jour les lignes existantes, vous devez faire les choses suivantes:

  • ajouter toutes les lignes que vous souhaitez mettre à jour votre DataSet (ce qui les ajoute avec un RowState = Added, donc ils seront traités par l'instruction INSERT)
  • appelez le .SetModified() sur ces lignes pour définir leur RowState sur modified. Maintenant, l'instruction UPDATE choisira ceux et les appliquer à la base de données

Bien sûr, vous aurez également besoin de régler la UpdateCommand sur votre SqlDataAdapter, et vous devez vous assurer que les travaux de l'instruction SQL UPDATE de telle sorte qu'il ne compare que par exemple la clé primaire pour faire correspondre les lignes à mettre à jour.

Avec cela, devrait pouvoir ajouter des lignes modifiées à votre DataSet et les mettre à jour sans jamais les récupérer en premier lieu.

Marc