SqlBulkCopy Wcf 2つのSQL Serverテーブル間でデータを移動する

c# rest sqlbulkcopy wcf

質問

あるSQL Serverデータベースから別のSQL Serverデータベースにいくつかのテーブルのデータを移動しようとしています。私はそれを行うwcf restサービスを書くつもりです。私はSQLBulkCopyを使用してこれを実装しようとしています。私はボタンのクリックで以下の機能を実装しようとしています。表1のデータを移行元のSQL Serverから移行先のSQL Serverの表1にコピーします。表2と表3と同じです。私はいくつかの事柄でブロックされています。 sql一括コピーは、データを転送するためのwcf restサービスで最適なオプションです。私はこの作業でssisを使わないように頼まれました。データをソースからデスティネーションに移動する際に例外がある場合は、デスティネーションのデータを元に戻す必要があります。それはトランザクションのようなものです。このトランザクション機能を実装するにはどうすればいいですか?任意のポインタが役立ちます。 chsarpのコード

接続

受け入れられた回答

あなたが与えた情報に基づいて、ソリューションは私が挿入したサンプルコードのようなものになります。 SQLBulkCopyのポインター: BCopyTutorial1BCopyTutorial2トランザクションスコープの例を含むSQLBulkCopyTrasactionBulkCopy

私のバージョンはあなたの質問に基づいて、これらの単純化されたバージョンです。

インタフェース:

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


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ