从Asp.net应用程序执行SSIS

时间:2009-07-28 14:50:43

标签: asp.net ssis

我正在尝试运行一个简单的SSIS包(将数据从外部文件夹复制到SQL 2005表中)。我想从Asp.net 2.0应用程序运行此包。有什么建议吗?

我搜索了许多不同的博客和网站,但所有这些方法都导致失败(通常是因为安全问题)

dtexec / FILE“包名称等”

EXEC master..xp_cmdshell @cmd(据说是一个非常糟糕的主意)

sp_start_job

app.LoadPackage(@“\ servername \ sharename \ Package1.dtsx”,null)

提前感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:5)

那么,杰克,你所列出的是一个半正确答案的大杂烩。

有很多方法可以启动SSIS包。但是,最好的方法可能是sp_start_job。现在,这意味着您将created a job运行您的SSIS包。

很多时候,这只小狗由于凭证问题而失败。也就是说,您正试图将血腥的东西作为SQL Server代理帐户(又名LOCAL SYSTEM)来运行,这对于执行能力来说并不是特别好。因此,您需要create a Credential,然后a Proxy才能运行该作业。因此,你需要做的是:

CREATE CREDENTIAL MyCred WITH IDENTITY 'CORP\MyUser', SECRET = '<PassGoesHere>'
GO
sp_add_proxy @proxy_name='MyProxy', @enabled = 1, @credential = 'MyCred'
GO
sp_grant_proxy_to_subsystem @proxy_name = 'MyProxy', @subsystem_id = 3
GO
sp_add_job @job_name = 'MyJob', @enabled = 1
GO
sp_add_jobstep 
    @job_name = 'MyJob', 
    @step_name = 'Run SSIS Package', 
    @subsystem = 'CMDEXEC', 
    @command = 'dtexec /F C:\Path\To\Package.dtsx', 
    @proxy_name = 'MyProxy'

有意义的文档:

  1. CREATE CREDENTIAL
  2. sp_add_proxy
  3. sp_grant_proxy_to_subsystem
  4. sp_add_job
  5. sp_add_jobstep

答案 1 :(得分:1)

在服务器端使用ASP.NET应用程序与我猜的任何其他.NET应用程序非常相似。我在这里有一个运行SSIS包的代码示例(SQLServer 2008),但由于我在这个项目中使用了NDA,所以我不能在这里复制'n'paste。

但是我可以告诉你,我们正在使用一个名为Microsoft.SqlServer.Dts.Runtime.Wrapper的命名空间,接口包和应用程序以及DTSExecResult枚举......它运行正常。

我们也将Excel表格导入我们的数据库。

修改的: 以下是我们如何在此处进行操作的概述: 我们有Excel表格,其中包含我们要导入系统的数据。我们的系统是ASP.NET 3.5 / Castle Project / SQLServer 2008。 一旦用户将新工作表上传到您的系统中,我们将其存储在一个文件夹中,假设为“c:\ UPLOAD”。触发了一个操作,因此我们调用我们的SSIS包将其导入SQL Server 2008。

我们如何实施它(C#):

Package package;
Application app;
DTSExecuteResult packageResult;

String packagePath = ""; // You have to get your physical path to your package.

app = new Application();
app.PackagePassword = "password"; // We have it here..
package = (Package)app.LoadPackage(packagePath, true, null);
packageResult = package.Execute();

如前所述,所有这些类都来自同一名称空间Microsoft.SqlServer.Dts.Runtime.Wrapper。

如果您遇到访问问题,我想您最好请求您的DBA提高您的权限,甚至创建一个新的权限只是为了运行SSIS的包,因为它需要更多级别的权限。

希望这可以帮到你。