以编程方式停止DTS包(使用C#)

时间:2010-08-13 16:49:30

标签: c# .net ssis dts

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

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

1 个答案:

答案 0 :(得分:0)

以下是一些选项:

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

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

    DECLARE @TEST INT;

    SET @TEST =

    (SELECT MAX(SPID)

    FROM master.dbo.sysprocesses

    WHERE program_name IN('我想杀掉这个SPID'));

    如果@TEST不是空

    BEGIN

    DECLARE @KILL_COMMAND NVARCHAR(100);

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

    EXEC sp_executeSQL @KILL_COMMAND;

    END

    上述方法的缺点是它只能用于杀死具有数据库连接的包。如果您使用的DTS包未连接到主机服务器,则不会有可填充的SPID。如果有多个SPID,这也不会全部杀死它们。您可能必须修改代码以构建要杀死的SPID列表。然后,您必须设置应用程序名称。您可能希望为每个DTS包设置唯一值,以便您不会意外杀死错误的包。默认值似乎设置为 DTS Designer ,如果服务器上运行了多个软件包,那么这将是不好的。

  3. 您或许可以启动并杀死DTS 2000程序包using extended stored procedures,但我并非100%确定这是可行的。