2011-07-20 17 views
1

1つのリモートSQLサーバーインスタンスから別のリモートSQLサーバーインスタンスにテーブルをコピーできるコンソールアプリケーションを作成する必要があります。EzAPIを使用してリモートsqlサーバーのソースと宛先にSSISパッケージを作成して実行する方法

私は両方の接続(ソースおよび宛先)とテーブル名は、コンソールアプリケーションへのパラメータとして提供されますEzAPI

と呼ばれるライブラリを使用しています。

public class OleDBToOleDB : EzSrcDestPackage<EzOleDbSource, EzSqlOleDbCM, EzOleDbDestination, EzSqlOleDbCM> 
    { 

     public OleDBToOleDB(Package p) : base(p) { } 

     public static implicit operator OleDBToOleDB(Package p) { return new OleDBToOleDB(p); }     

     public OleDBToOleDB(string SrcServer, string SrcDB, string SrcTable,string SrcUser,string SrcPassword, string DstServer, string DstDB, string DstTable,string DstUser,string DstPassword)    
     { 
      SrcConn.SetConnectionString(SrcServer, SrcDB); 
      SrcConn.ServerName = SrcServer; 
      SrcConn.InitialCatalog = SrcDB; 
      SrcConn.UserName = SrcUser; 
      SrcConn.Password = SrcPassword; 

      Source.Table = SrcTable; 

      DestConn.SetConnectionString(DstServer, DstDB); 
      DestConn.ServerName = DstServer; 
      DestConn.InitialCatalog = DstDB; 
      DestConn.UserName = DstUser; 
      DestConn.Password = DstPassword; 


      Dest.Table = DstTable;       
     }   
    } 

static void Main(string[] args) 
     {    
      OleDBToOleDB p = new OleDBToOleDB("localhost", "TestDB", "Address", "sa", "123", "localhost", "DestDB", "Address", "sa", "123"); 

      p.Execute(); 

      Console.Write(string.Format("Package2 executed with result {0}\n",p.ExecutionResult)); 
     } 

このコードに問題がある:

  • それは先サーバー上のテーブルを作成していないので、私は 自分でそれを手動で作成する必要があり

    は、ここに私の試みです。

  • このコードは、ローカルホスト上で正常に動作しますが、私はそれがこのエラーが発生したリモートサーバーへ 変更サーバ名をしようとすると:私はこのエラーが意味することを見つけ、ウェブ上で検索した後

Unhandled Exception: System.Runtime.InteropServices.COMException (0xC020801C): Exception from HRESULT: 0xC020801C

このエラーはIntegration ServicesのAcquireConnections例外です。

このコードをリモートSQL Serverインスタンスで実行して、データを転送する前に、パッケージを宛先サーバーに作成させるにはどうすればよいですか。

ありがとうございます。

答えて

1

テーブルの各列のメタデータ全体を取得する必要があるため、SSISはパッケージの生成中にテーブルを作成する必要があります。 ValidateMetadataプロパティをfalseに設定できます。この場合、検証は行われませんが、すべてのデータを自分で埋めなければなりません。これは簡単ではありません。

私はあなたがすることができる最も簡単なことがあると思う:ローカル接続でパッケージを生成して、宛先コンポーネント 2の検証をオフにする) 1)は今 3あなたの送信元と送信先compoenntsに新しい接続文字列を設定します)パッケージを実行してください

これは本当にクリーンな回避策ではありません。これは通常は設定で行うべきですが、パッケージを保存しないので、これも試してみてください。

SSISなしでSqlBuldCopyでタスクを実装する方が簡単だと思います

関連する問題