我正在尝试运行一个简单的SSIS包(将数据从外部文件夹复制到SQL 2005表中)。我想从Asp.net 2.0应用程序运行此包。有什么建议吗?
我搜索了许多不同的博客和网站,但所有这些方法都导致失败(通常是因为安全问题)
dtexec / FILE“包名称等”
EXEC master..xp_cmdshell @cmd(据说是一个非常糟糕的主意)
sp_start_job
app.LoadPackage(@“\ servername \ sharename \ Package1.dtsx”,null)
提前感谢您提供的任何帮助。
答案 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 :(得分: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的包,因为它需要更多级别的权限。
希望这可以帮到你。