SqlBulkCopy Wcf Rest 在 2 sql 服务器表之间移动数据

SqlBulkCopy Wcf Rest Moving Data between 2 sql server tables

我正在尝试将一些 table 中的数据从一个 sql 服务器数据库移动到另一个 sql 服务器数据库。我打算编写一个 wcf 休息服务来做到这一点。我也在尝试使用 SQLBulkCopy 来实现它。我正在尝试在单击按钮时实现以下功能。将 Table1 数据从源 sql 服务器复制到目标 sql 服务器中的 Table 1。与 table 2 和 table 3 相同。我在几件事上受阻。 sql 批量复制是使用 wcf rest 服务传输数据的最佳选择吗?我被要求不要在此任务中使用 ssis。如果在将数据从源移动到目标时出现任何异常,则应将目标数据还原。这有点像交易。我如何实现这个交易功能。任何指针都会有所帮助。

根据您提供的信息,您的解决方案类似于我插入的示例代码。 SQLBulkCopy 的指针:BCopyTutorial1, BCopyTutorial2 SQLBulkCopy with transaction scope examples: TrasactionBulkCopy

根据你的问题,我的版本是这些的简化版本。

接口:

[ServiceContract]
public interface IYourBulkCopyService {

    [OperationContract]
    void PerformBulkCopy();
}

实施:

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();
                        }
                    }
                }
            }
        }
    }
}