Solved

how can I stop a DTS package programmatically?

Posted on 2010-08-19
9
1,351 Views
Last Modified: 2013-11-30
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.
0
Comment
Question by:rkpavp
9 Comments
 
LVL 1

Expert Comment

by:incidental74
ID: 33481290
How is the package executed within the program? using the DTEXEC command?
0
 

Author Comment

by:rkpavp
ID: 33482920
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.
0
 
LVL 1

Expert Comment

by:incidental74
ID: 33516540
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?
0
 
LVL 30

Expert Comment

by:nmcdermaid
ID: 33516796
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.
0
6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

 
LVL 75

Expert Comment

by:Anthony Perkins
ID: 33517300
>>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.

0
 

Author Comment

by:rkpavp
ID: 33520759
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.
0
 
LVL 1

Accepted Solution

by:
incidental74 earned 500 total points
ID: 33524338
DTSRun is just a command line utility, so executing it is as simple as using the Process.Start method in VB.Net (sorry not a C# guy, but I'm sure there is an equivalent). To help you build your DTSRun command line for the first time, you can use the DTSRunUI utility as explained here: http://www.sqldts.com/301.aspx.

After you execute DTSRun using Process.Start, the VB.Net program would not wait for DTSRun to finish before moving on to the rest of your code. That is, Process.Start would execute DTSRun asynchronously and your package would run on its own. That is where the WaitForExit method and HasExited property come into play.

To answer your question about rollbacks, it is kind of hard to say without knowing what your DTS package does. However, I do not think killing the process using DTSRun would rollback any work that may have been done by the DTS package. Nevertheless, upon killing the DTS package, it should kill and rollback any active SPIDs that are currently running from the package (at least that is how it works in SSIS).
Dim myProcess As Process = Process.Start("[Your DTSRun command line]")
myProcess.WaitForExit(10000)
' if the process doesn't complete within
' 10 seconds, kill it
If Not myProcess.HasExited Then
   myProcess.Kill()
End If

Open in new window

0
 

Author Closing Comment

by:rkpavp
ID: 33598389
the solution points me to the right direction and need to improve it to get the desired result. thanks a lot.
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

JSON is being used more and more, besides XML, and you surely wanted to parse the data out into SQL instead of doing it in some Javascript. The below function in SQL Server can do the job for you, returning a quick table with the parsed data.
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
This video shows, step by step, how to configure Oracle Heterogeneous Services via the Generic Gateway Agent in order to make a connection from an Oracle session and access a remote SQL Server database table.
Via a live example combined with referencing Books Online, show some of the information that can be extracted from the Catalog Views in SQL Server.

708 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now