SqlBulkCopy Wcf Rest Déplacement de données entre 2 tables de serveur SQL

c# rest sqlbulkcopy wcf

Question

J'essaie de déplacer les données de certaines tables d'une base de données de serveur SQL vers une autre base de données de serveur SQL. Je prévois d'écrire un service de repos wcf pour le faire. J'essaye également d'implémenter ceci en utilisant SQLBulkCopy. J'essaie d'implémenter la fonctionnalité ci-dessous en cliquant sur un bouton. Copiez les données Table1 du serveur SQL source vers le tableau 1 du serveur SQL de destination. Comme pour les tableaux 2 et 3. Je suis bloqué sur plusieurs points. La copie en bloc SQL est-elle une meilleure option avec le service wcf rest pour transférer des données? On m'a demandé de ne pas utiliser de SSIS dans cette tâche. S'il existe une exception lors du déplacement de données de la source vers la destination, les données de destination doivent être restaurées. C'est quelque chose comme une transaction. Comment puis-je implémenter cette fonctionnalité de transaction. Tout pointeur aiderait. Code en chsarp

Les liaisons

Réponse acceptée

Sur la base des informations que vous avez fournies, votre solution ressemblerait à l’exemple de code que j’ai inséré. Pointeurs pour SQLBulkCopy: BCopyTutorial1 , BCopyTutorial2 SQLBulkCopy avec des exemples d'étendue de transaction: TrasactionBulkCopy

Ma version est une version simplifiée de celles-ci, basée sur votre question.

Interface:

[ServiceContract]
public interface IYourBulkCopyService {

    [OperationContract]
    void PerformBulkCopy();
}

La mise en oeuvre:

public class YourBulkCopyService : IYourBulkCopyService {

    public void PerformBulkCopy() {
        string sourceCs =  ConfigurationManager.AppSettings["SourceCs"];
        string destinationCs =  ConfigurationManager.AppSettings["DestinationCs"];

        // Open a sourceConnection to the AdventureWorks database. 
        using (SqlConnection sourceConnection = new SqlConnection(sourceCs) {
            sourceConnection.Open();

            //  Get data from the source table as a SqlDataReader.         
            SqlCommand commandSourceData = new SqlCommand(
                "SELECT * FROM YourSourceTable", sourceConnection);
            SqlDataReader reader = commandSourceData.ExecuteReader();

            //Set up the bulk copy object inside the transaction.  
            using (SqlConnection destinationConnection = new SqlConnection(destinationCs)) {
                destinationConnection.Open();

                using (SqlTransaction transaction = destinationConnection.BeginTransaction()) {
                    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(
                               destinationConnection, SqlBulkCopyOptions.KeepIdentity,
                               transaction)) {
                        bulkCopy.BatchSize = 10;
                        bulkCopy.DestinationTableName =
                            "YourDestinationTable";

                        // Write from the source to the destination. 
                        try {
                            bulkCopy.WriteToServer(reader);
                            transaction.Commit();
                        } catch (Exception ex) {
                            // If any error, rollback
                            Console.WriteLine(ex.Message);
                            transaction.Rollback();
                        } finally {
                            reader.Close();
                        }
                    }
                }
            }
        }
    }
}


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi