Bulkinsert en c#

Soyez le premier à donner votre avis sur cette source.

Vue 5 984 fois - Téléchargée 639 fois

Description

Cette source permet l'insertion de donnée dans une table en mode BULK (+rapide en gros)
elle montre l'utilisation de la classe SqlBulkCopy ainsi qu'une méthodologie souple et facilement réutilisable.

Cette source fais suite a : http://www.csharpfr.com/codes/SPLIT-SQL-SANS-TABLE-TEMPORAIRE_49355.aspx

la source est en C#3 sur framework .NET 3 pour Visual Studio 2008 (le passage vers C#2 et .NET 2 est aisé)

Source / Exemple :



  • Pensez a Changer la constante ChaineDeConnection pour vous connecter à votre serveur cible !
  • Pensez a créer la table suivante sur le serveur cible avant de tester ce code
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[BCP_Test]( [ID] [int] IDENTITY(1,1) NOT NULL, [Nom] [nvarchar](200) NOT NULL, [Prénom] [nvarchar](200) NULL, [Age] [int] NOT NULL, [data_0] [nvarchar](50) NULL, [data_1] [nvarchar](50) NULL, [data_2] [nvarchar](50) NULL, [data_3] [nvarchar](50) NULL, [data_4] [nvarchar](50) NULL, [data_5] [nvarchar](50) NULL, [data_6] [nvarchar](50) NULL, [data_7] [nvarchar](50) NULL, [data_8] [nvarchar](50) NULL, [data_9] [nvarchar](50) NULL, CONSTRAINT [PK_BCP_Test] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]

Conclusion :


La source est assez peu documenter concernant la classe DatareaderHelper<T> mais cette classe est juste un foure tout pratique mais trés mal optimiser (Reflexion Powa) à mon gout. je conseille donc de ne pas trop l'utilisé sur des projet ou la charge CPU est un facteur crucial.

La méthode utiliser est trés souple et permet de facilement changer la source des donnée, les rêgle de vérifications des donnée.
Chague étape se voie attribué une fonction simple qui peux être facilement tester hors context.
Des étapes peuvent être ajouter ou supprimer sans difficulter.
Les donnée sont toutes traiter "à la volé" la consomation mémoire est extremement faible même si l'on importe des millions de ligne de donnée. Attention à ne pas se leurer, toutes les données doivent bien être stocké qq part, SQL serveur établie sans aucun doute sont propre tampon que se soit en mémoire ou sur disque(nan la magie n'éxiste pas :s ).

Malgrés le peu d'optimisation du code, le temps de traitement est faible face aux temps de sql Serveur a réalisé l'import (et oui même en mode bulk faut pas rêver).

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.