首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用EzAPI在远程Server源和目标上创建和执行SSIS包

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

Stack Overflow用户
提问于 2011-07-20 11:50:19
回答 1查看 1.2K关注 0票数 1

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

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

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

以下是我的尝试:

代码语言:javascript
复制
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

在web上搜索之后,我发现这个错误意味着这个错误是Integration异常。

因此,如何让这段代码在远程sql服务器实例上运行,并让包在传输数据之前在目标服务器上创建表。

提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2012-01-27 11:45:38

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

我认为您能做的最简单的事情是:1)生成带有本地连接的包,然后关闭目标组件的验证,2)现在将新的连接字符串设置为源和目标compoennts 3)运行包。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6761405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档