如何使用EzAPI在远程sql Server源和目标上创建和执行SSIS包

本文关键字:目标 创建 执行 SSIS Server EzAPI 何使用 sql | 更新日期: 2023-09-27 18:02:57

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

我正在使用一个名为EzAPI的库

连接(源和目的地)和表名都将作为参数提供给Console应用程序。

这是我的尝试:

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): Exception from HRESULT: 0xC020801C

在网上搜索后,我发现这个错误意味着这个错误是一个集成服务AcquireConnections异常。

那么我如何让这段代码在远程sql server实例上运行,并在传输数据之前让包在目标服务器上创建表呢?

提前感谢。

如何使用EzAPI在远程sql Server源和目标上创建和执行SSIS包

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

我认为你能做的最简单的事情是:1)生成具有本地连接的包,并关闭对目标组件的验证2)现在设置新的连接字符串到你的源和目标组件3)运行包

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

我认为它也可以更容易地实现你的任务与SqlBuldCopy没有SSIS