10
votes

Est-il possible d'insérer un fichier vb.net complet dans un serveur SQL à la fois

J'ai un sqlclient.dataset dans vb.net et je souhaite insérer la totalité de la chose dans une table SQL Server sans avoir à suivre les suivantes:

For Each dr as Datarow in MyDataset
  Dim sc As New SqlCommand("INSERT INTO MyNewTable " & _
                            "VALUES (@column1, @column2)", MyDBConnection)
  sc.Parameters.AddWithValue("@column1", dr.Item(0))
  sc.Parameters.AddWithValue("@column2", dr.Item(1))
  sc.ExecuteNonQuery()
Next


0 commentaires

5 Réponses :


18
votes

Essayez avec sqlbulkcopy


2 commentaires

Cela semble être exactement ce que je voulais. Je n'avais aucune idée de cette classe existait - merci!


Il a inséré un million d'enregistrements dans environ quatre secondes - c'est parfait. Merci encore!



2
votes

Vous pouvez appeler .writexml () sur le jeu de données et décharger cela dans la base de données dans un insert.


0 commentaires

3
votes

Utilisez le SQLDataAdapter 's InsertionCommand pour définir votre requête d'insertion. Appelez ensuite la méthode de mise à jour du datadapter avec votre jeu de données comme paramètre pour que cela puisse pousser les données.

quelque chose comme: xxx


2 commentaires

J'ai considéré cette idée, mais je pense que cela génère toujours une déclaration d'insertion pour chaque rangée. Au moins, cela le fait à l'arrière-plan, cependant, il est donc propre.


Je me rends compte que ceci est un ancien poste, mais cet article MSDN apparaît pertinent en ce qui concerne les performances ... Si les tables de source et de destination sont dans la même instance SQL Server, il est plus facile et plus rapide d'utiliser une insérence SQL ... Sélectionnez une instruction SELECT. copier les données. MSDN.MicRosoft.com / FR-US / Bibliothèque / ...



8
votes

avec SQL Server 2008 Vous pouvez utiliser Paramètres de valorisation de la table : xxx


2 commentaires

J'utilise 2008, et c'est une idée géniale! Je me demande comment la performance se compare à SQLBulkCopy - je le fais sur un LAN Gigabit en ce moment, mais sur une connexion WAN plus lente, toute idée de la comparaison?


La performance sera pilotée par la vitesse de transfert (client sur serveur) et la différence de quantité de données entre la copie en vrac et la TVP est minimale, afin de pouvoir se comporter de la même manière. Meilleure mesure.



0
votes

Un moyen plus simple est d'utiliser un adaptateur de table. Ensuite, vous pouvez utiliser la méthode de remplissage pour donner un argument de type de données:

    Dim oStronglyTypedTable As StronglyTypedDataTable = GetTable() 'A custom function that creates your table from wherever you want)
    If Not oStronglyTypedTable Is Nothing Then
        Using oAdapter As New StronglyTypedTableAdapter
            Dim res As Integer = oAdapter.Update(oStronglyTypedTable)
            MsgBox(res & " rows have been updated.")
        End Using
    End If


0 commentaires