如何在ASP.NET中运行SSIS

时间:2010-07-02 19:06:10

标签: c# .net asp.net ssis

我在这里有c#代码。

using Microsoft.SqlServer.Dts.Runtime; 

string filedts = "C:\\SSIS\\SQLtoFLAT\\PQFormTEST2.dtsx";    
Application app = new Application();
Package package = app.LoadPackage(filedts, null);
DTSExecResult result = package.Execute();

我看到所有网站代码都是这样的,但是当我运行它时,我在ASP.NET中, 没有任何错误,但结果“失败”。

为什么呢?如何解决?

感谢您的帮助, 朱莉娅

4 个答案:

答案 0 :(得分:4)

我从.Net应用程序运行SSIS包时看到的最常见问题是误解了它们的运行位置。 SSIS包不是基于服务器的执行单元,它们在它们所驻留的服务器的上下文中运行,如T-SQL命令或存储过程。 SSIS包被加载到您正在调用它的进程中,并在本地执行。 这意味着:

  • SSIS必须安装在您的网站上 服务器,或
  • 你需要建立一个 SSIS的远程执行解决方案(dtExecRemoteSQL Agent Jobs,...)

答案 1 :(得分:2)

我怀疑的第一件事是安全问题 - ASP.Net进程是否可以访问.dtsx文件?

这是一个简单的检查方法:下载ProcessExplorer:http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx并在您尝试执行此代码时运行它

Process Explorer将监控每个文件访问,它会告诉您它是否失败或成功。有可能,您将看到打开dtsx文件失败。

(当然你可以直接向dtsx文件授予权限,但是值得花时间学习进程监控 - 这是诊断此类事情的绝佳工具。)

答案 2 :(得分:1)

我宁愿在SQL Server上部署dtsx并创建一个将从WebSite异步运行的Job(使用SMO)。

创建一个Job很容易,如果你有sSIS包,我想你有一个SQL Server。您只需创建一个RUN SSIS包的步骤。然后,您可以选择服务器上部署的其中一个软件包,并根据需要执行任何其他步骤。

从ASP.NEt运行作业需要Server Management Objects API。 通常,您获取对服务器的引用。枚举要运行的作业。然后单击运行。

当然如果您的包使用xml配置您将需要创建一个文件(来自ASP.NET或其他层)。 希望能帮助到你。我稍后会尝试发布代码示例。

答案 3 :(得分:1)

您可以创建运行包的作业,创建运行该作业的存储过程,然后像平常一样调用SP。这是pretty simple ...

ALTER PROCEDURE [dbo].[ExecJob]
-- Add the parameters for the stored procedure here
@spName varchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
DECLARE @r INT 

--BEGIN TRY 
    EXEC @r = msdb.dbo.sp_start_job @spName
--END TRY 
--BEGIN CATCH 

--END CATCH

SELECT @r
END

请注意,返回的@r是作业状态代码