Link to home
Start Free TrialLog in
Avatar of rkpavp
rkpavp

asked on

how can I stop a DTS package programmatically?

Hi,  I would like to know how to cancel a DTS (SQL server 2000) package programmatically (using C# or VB.NET or Visual basic). the package is executed programmatically, not in SQL server job. there is a Stop method available for SSIS packages, but I could not find an equivalent one for DTS packages. I searched everywhere, but couldn't find a solution for it. any help would be appreciated. the package is executed by a support person and if it hangs for some reason, I would like provide a button to abort its execution, because support won't have access to database to kill it from Enterprise manager or Management studio. thanks in advance.
Avatar of incidental74
incidental74
Flag of United States of America image

How is the package executed within the program? using the DTEXEC command?
Avatar of rkpavp
rkpavp

ASKER

the package is executed using the Microsoft DTS Object Library (COM API), as mentioned in the article http://www.c-sharpcorner.com/UploadFile/fbulovic/DTSnCS12062005072324AM/DTSnCS.aspx. it is urgent. Please let me know if you have any solution.
I was leaning more towards terminating the actual executable that runs the DTS package. It has been a while since I have worked with DTS, but no matter how the DTS package is executed, the executable that is responsible for running the package is DTEXEC or DTSRun, or something like that.

I was thinking that you could terminate the executable with a button after a certain period of time. Try running your program and watch on the server for a DTEXEC or DTSRun process in Task Manager pop up. You can use COM to then grab a hold of that handle and kill it.

Can you send some code over?
My thoughts also - termainte the executable. Problem is there is all sorts of cleanup that the database has to do anyway - i.e. you can end up with some kind of orphan process and you can make things worse.
If your package is hanging (amusing statement) then you would be better off working out why and fixing it.
Avatar of Anthony Perkins
>>If your package is hanging (amusing statement) then you would be better off working out why and fixing it.<<
I agree on all three counts.      :)

However, if you insist on terminating it, then consider KILLing the spid for the process instead of stopping the actual process.  It should prove to be less invasive.

Avatar of rkpavp

ASKER

thanks for all the replies. but if I kill the executable, will the changes made to the database be rolled back (or does it depend on if it is executed within a sql transaction) OR will it leave the data in partially committed state? I have seen that if I use the DTS COM object model API to execute the package, then it raises the onQueryCancel event periodically allowing the caller to cancel the package. so I was thinking if the user wishes to cancel the package, then set a flag in database and read that flag in onQueryCancel event handler and cancel the package accordingly, then it will terminate it gracefully. BUT there is another issue here. if I run the package using the code in the original link, then if it consumes too much memory, then it could cause recycling of web server application pool, so I have no choice but to execute the package using DTSRUN command, because it runs in a separate process from the webserver.
     can I get some sample code in C# OR VB.NET to execute a DTS package using DTSRUN (I guess I can't use DTEXEC because it is used only SSIS packages?) and also sample code to kill it if required. Please note that the package needs to be loaded from webserver file system, not from the database. Thanks in advance.
ASKER CERTIFIED SOLUTION
Avatar of incidental74
incidental74
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of rkpavp

ASKER

the solution points me to the right direction and need to improve it to get the desired result. thanks a lot.