Copie à partir d'une table de base de données à l'autre C#
À l'aide de C# (vs2005) j'ai besoin de copier une table d'une base de données à l'autre. Les deux moteurs de base de données SQL Server 2005. Pour la base de données distante, la source, j'ai seulement accès en exécution d'une procédure stockée à obtenir les données dont j'ai besoin pour apporter localement.
La base de données locale, j'ai plus de contrôle sur qu'il est utilisé par le [asp.net] application qui a besoin d'une copie locale de cette table distante. Nous souhaitons local pour faciliter la recherche et la rejoint avec d'autres tableaux, etc.
Pourriez-vous svp m'expliquer une méthode efficace de copier ces données dans notre base de données locale.
La table locale peut être créé avec le même schéma que la distance, si elle rend les choses plus simples. La table distante a 9 colonnes, qui sont les colonnes d'identité. Il y a environ 5400 lignes dans la table distante, et ce nombre croît d'environ 200 par an. Afin de ne pas rapidement la table à langer.
OriginalL'auteur Brettski | 2009-02-19
Vous devez vous connecter pour publier un commentaire.
Fonctionnalité de Copie en bloc ADO.NET pourrait vous aider à prendre un coup d'oeil à l' :
MSDN - Plusieurs Opérations de Copie en bloc (ADO.NET)
Un exemple d'article
OriginalL'auteur Canavar
Peut-être SqlBulkCopy; utiliser SqlCommand.ExecuteReader pour amener le lecteur que vous utilisez dans l'appel à SqlBulkCopy.WriteToServer. C'est la même chose en vrac insérer, de manière très rapide. Il devrait ressembler à quelque chose comme (non testé);
Oups oui, j'ai oublié le nom de la table ;-p Sera corrigé...
OriginalL'auteur Marc Gravell
Je voudrais d'abord regarder à l'aide de SQL Server Intégration de Services (SSIS, née le Transfert de Données des Services (DTS)).
Il est conçu pour déplacer/comparer/traitement/transformation des données entre des bases de données, et IIRC permet une expression arbitraire de la source. Vous avez besoin d'installé sur votre base de données (il ne devrait pas être un problème, il fait partie d'une installation par défaut).
Sinon, une solution de code, compte tenu de la taille des données (petit), de tirer toutes les données de la supprimer du système dans une structure interne, et ensuite, regardez pour les lignes qui n'existent pas localement à insérer.
OriginalL'auteur Richard
Vous ne pourrez probablement pas faire cela, mais si vous ne pouvez pas, ne PAS le faire avec un programme. Si vous avez la possibilité de parler à quelqu'un qui contrôle le serveur source, voir si ils seront mis en place une sorte d'exportation des données. Si les données sont aussi petits que vous dites, alors xml ou csv sortie serait 100x mieux que d'écrire quelque chose en c# (ou de n'importe quelle langue).
Supposons donc qu'ils ne peuvent pas exporter, encore, d'éviter l'écriture d'un programme. Vous dites que vous avez plus de contrôle sur la destination. Pouvez-vous mettre un package SSIS, ou l'installation d'un serveur lié? Si oui, vous aurez un temps beaucoup plus facile de migrer les données.
Si vous avez configuré au minimum la source en tant que serveur lié, vous pouvez écrire un petit t-sql lot
TRONQUER DestTable
INSÉRER DANS DestTable
SÉLECTIONNEZ SourceTable.Star DE [Doit].[Schema].[Table]
ne serait pas aussi beau que SSIS (vous avez plus de visuel de ce qui se passe, mais le t-sql ci-dessus est assez clair).
Depuis je ne prendrais pas la programmation de la route, la meilleure solution que je pourrais vous donner serait, si vous fallait absolument:
Utilisation SqlClient.
Créez 2 SqlConnections, 2 SqlCommands, et d'obtenir l'instance de l'1 SqlReader.
Itérer la source lecteur, et exécuter la destination SqlCommand insérer pour chaque itération avec le.
Ça va être laid, mais il va travailler.
OriginalL'auteur
Ne semble pas être énorme quantité de données à synchroniser. Dans des conditions que vous avez décrit (uniquement SP pour accéder à la distance DB et aucun moyen d'obtenir quoi que ce soit d'autre), vous pouvez aller pour Marc Gravel de la solution.
Dans le cas où les données ne peuvent que croître et de données existante ne peut pas être changé, vous pouvez comparer le nombre d'enregistrement de la télécommande et de la bd interne afin d'optimiser l'opération; si pas de changement dans la distance DB pas besoin de la copier.
OriginalL'auteur Dan