【问题标题】:How to Create and Execute an SSIS Package on remote sql Server source and destination using EzAPI如何使用 EzAPI 在远程 sql Server 源和目标上创建和执行 SSIS 包
【发布时间】:2011-07-20 11:50:19
【问题描述】:

我需要创建一个控制台应用程序,它可以将表从一个远程 sql server 实例复制到另一个远程 sql server 实例。

我正在使用一个名为 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));
        }

这段代码的问题是:

  • 它不会在目标服务器上创建表,所以我应该 自己手动创建。
  • 此代码在本地主机上成功运行,但是当我尝试 将服务器名称更改为远程服务器会引发此错误:

未处理的异常:System.Runtime.InteropServices.COMException (0xC020801C):HRESULT 异常:0xC020801C

在网上搜索后发现这个错误表示这个错误是Integration services AcquireConnections异常。

那么我怎样才能让这段代码在远程 sql server 实例上运行,并在传输数据之前让包在目标服务器上创建表。

提前谢谢你。

【问题讨论】:

    标签: c# sql-server-2008 ssis etl ezapi


    【解决方案1】:

    SSIS 需要在包生成过程中将两者都列出,因为它必须获取表中每一列的完整元数据。您可以将 ValidateMetadata 属性设置为 false,在这种情况下它不会验证它,但您需要自己填写所有数据。这并不容易。

    我认为您可以做的最简单的事情是: 1)使用本地连接生成包并关闭目标组件的验证 2)现在将新的连接字符串设置为您的源和目标组件 3)运行包

    这是一个不太干净的解决方法。这通常应该通过配置来完成,但由于您不保存包,您也可以尝试这样做。

    我认为在没有 SSIS 的情况下使用 SqlBuldCopy 实现您的任务也会更容易

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-14
      • 1970-01-01
      • 2023-01-30
      相关资源
      最近更新 更多