【问题标题】:stop a DTS package programmatically (using C#)以编程方式停止 DTS 包(使用 C#)
【发布时间】:2010-08-13 16:49:30
【问题描述】:

有没有办法停止当前正在运行的 SQL Server 2000 DTS(不是 SSIS)包,使用 C# 以编程方式?我认为可以使用 COM API 执行包,但我找不到停止正在运行的包的方法。提前致谢。

更新:SSIS 中有一种方法可以获取正在运行的包的列表以及一种停止它们的方法。但我在 COM 对象 API 中找不到与 DTS 包等效的包。

【问题讨论】:

    标签: c# .net ssis dts


    【解决方案1】:

    这里有几个选项:

    1. 如果您正在作业中运行 DTS 包,则可以使用 sp_stop_job 停止正在运行的作业。

    2. 如果您知道 DTS 包的进程的 SPID,则可以向 SPID 发出KILL command,这将停止 DTS 包的执行。识别 SPID 的一种可能方法是通过一些识别信息在 master.dbo.sysprocesses 表中找到 SPID,然后为 SPID 发出 KILL 命令。这是我通过将连接属性 -> 高级 -> 应用程序名称设置为 I Want To Kill This SPID 测试的一组代码。

      声明@TEST INT;

      SET @TEST =

      (选择最大值(SPID)

      来自 master.dbo.sysprocesses

      WHERE program_name IN ('I Want To Kill This SPID'));

      如果@TEST 不为空

      开始

      DECLARE @KILL_COMMAND NVARCHAR(100);

      SET @KILL_COMMAND = 'KILL' + CONVERT(NVARCHAR(100), @TEST);

      执行 sp_executeSQL @KILL_COMMAND;

      结束

      上述方法的缺点是它仅适用于杀死具有数据库连接的包。如果您使用的 DTS 包未连接到主机服务器,则不会有可终止的 SPID。如果有多个 SPID,这也不会全部杀死它们。您可能必须修改代码以构建要杀死的 SPID 列表。然后是您必须设置应用程序名称的事实。您可能希望为每个 DTS 包设置唯一值,以免意外杀死错误的包。默认值似乎设置为 DTS 设计器,如果服务器上正在运行多个包,这将很难杀死。

    3. 您可能能够启动并终止 DTS 2000 软件包 using extended stored procedures,但我不能 100% 确定这是可行的。

    【讨论】:

    • 感谢您的回复。我没有在工作中运行 DTS 包。该软件包存储在网络服务器上的文件系统中,并且在 SQL Server 代理作业中运行它需要在网络服务器上安装 SQL 服务器引擎,根据我公司的政策,这是不允许的。但是服务器上安装了 SSIS 和 DTS 运行时,因此可以通过编程方式执行包,但我不知道如何以编程方式停止 DTS 包。
    • 好的。我继续并提供了有关如何实施我在帖子中提到的第二个选项的详细信息。希望这将使您更容易找到停止包的有效方法。它不是完整的证明,但它涵盖了任何尝试将数据加载到数据库或在数据库上执行 SQL 命令的过程。
    • 感谢您的回复,我会试试看。根据链接support.microsoft.com/?kbid=321525,似乎还有另一个直接的选项,它说 onQueryCancel 事件提供了取消包的选项,但我不明白该怎么做。如果您对此有任何线索,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 2011-04-10
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多