2010-07-02 57 views
1

我在这里有c#代码。如何在ASP.NET中运行SSIS

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运行它, 有没有任何错误,但结果得到了“失败”。

为什么?如何解决它?

感谢您的帮助, 朱莉娅

+1

请注意,你的问题无关,与C#,但一切与ASP.NET。 – 2010-07-02 19:28:24

回答

2

首先我怀疑的是,它是一个安全问题 - 请问ASP.Net过程中有机会获得.dtsx程序文件?

下面就来检查一个简单的方法:下载ProcessExplorer:http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx并运行它,而你试图执行这些代码

的Process Explorer将监控每一个文件的访问,它会告诉你,如果它失败或成功。机会是,你会看到打开你的dtsx文件失败。

(当然,您可以将权限授予dtsx文件,但值得花时间学习进程监视器 - 诊断此类事件的绝佳工具)。

1

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

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

从ASP.NEt运行作业需要服务器管理对象API。 一般您可以获得对服务器的引用。列举一个Job来运行。然后单击运行。

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

4

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

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

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

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返回的作业状态代码