【问题标题】:Which method should I use to execute an SSIS package remotely from a .net application?我应该使用哪种方法从 .net 应用程序远程执行 SSIS 包?
【发布时间】:2015-06-10 19:28:08
【问题描述】:

我需要从 C# .net 应用程序远程执行位于 SSIS 包存储中的 SSIS 包。

应用程序位于单独的服务器上,无法在应用程序服务器上安装集成服务。

我的开发机器上的功能只使用文件系统方法,因为我安装了集成服务来让它运行。现在我需要翻转它来远程调用包。

现在我正在使用以下内容:

pkg = app.LoadFromDtsServer("\loadfile", "DBServer", Nothing)

但我收到以下错误:

“连接到计算机“DBServer”上的 Integration Services 服务失败,出现以下错误:“拒绝访问。”默认情况下,只有管理员可以访问 Integration Services 服务。在 Windows Vista 和更高版本上,该进程必须以管理权限运行才能连接到 Integration Services 服务。有关如何配置对服务的访问权限的信息,请参阅帮助主题。"

当然,在生产环境中运行此应用程序的用户不会被授予在数据库服务器上的此类权限。我怎样才能使它以 sql 用户身份运行?这是解决这个问题的正确方法吗?我知道还有其他选择。包不一定要存放在包存储中,但我相信这是最佳做法。

我还应该提到,应用程序通过包变量传递文件名,因此任何解决方案都需要能够做到这一点。如果我创建一个作业来运行包,我不确定如何执行此操作。

【问题讨论】:

  • 我通过创建一个调用包的作业并使用 .net 中的 sql 命令启动该作业而成功地做到了这一点。
  • 如果您使用此方法传递变量,您介意分享一下吗?如果是这样,你是怎么做到的?
  • 当然可以。我创建了一个“JobHistory”表,其中包含需要传递给包的每个变量的列。 .net 应用程序将运行一个在该表中插入一行的 sql 命令,然后它会启动这项工作。该软件包的第一步是从表中的最新行中读取变量。最后一步是更新表并将“JobResult”列设置为“成功”或其他消息。
  • 太棒了。您是否使用 exec msdb.dbo.sp_start_job 来启动工作?
  • 很确定就是这样,是的。我相信我是从填充 JobHistory 表的同一个存储过程中调用它的。我依稀记得我必须做一些事情来处理并发,但我不记得那是什么。

标签: c# asp.net sql-server-2008 ssis dts


【解决方案1】:

如果您将参数从 .NET 应用程序传递到 SSIS 包,请查看以下链接以获取选项:

How to execute an SSIS package from .NET?

如果没有传递任何参数,那么更简单的方法是将 SSIS 包添加到作业,然后从 .NET 应用程序调用作业。以下链接提供了一个代码示例:

http://www.roelvanlisdonk.nl/?p=1736

【讨论】:

  • 感谢您的回复。我们正在传递参数(文件名),我们无法在应用程序服务器上安装集成服务(见上文),因此很遗憾,这些将不起作用。
【解决方案2】:

您可以使用 SSIS 目录中的存储过程来部署项目并执行包

https://msdn.microsoft.com/en-US/library/jj820152.aspx?f=255&MSPPError=-2147217396

【讨论】:

  • 不幸的是,我们使用的是 sql server 2008 并且无法使用目录,所以这不是一个选项 - 不过谢谢!
猜你喜欢
  • 1970-01-01
  • 2018-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多