2008-11-07 3 views
74

У меня есть пакет SSIS, который в конце концов я тоже хотел бы передать параметры, эти параметры будут получены из .NET-приложения (VB или C#), поэтому мне было любопытно, знает ли кто-нибудь, как это сделать, или, еще лучше, веб-сайт с полезные советы о том, как это сделать. Поэтому в основном я хочу выполнить пакет SSIS из .NET, передавая параметры пакета SSIS, которые он может использовать в нем. Например, пакет SSIS будет использовать плоский импорт файлов в SQL db, однако путь и имя файла могут быть параметром, который передается из приложения .Net.Как выполнить пакет SSIS из .NET?

+10

К будущим читателям: Прежде чем использовать решение ниже, просмотрите свое лицензирование. Я считаю, что это работает только на машинах с установленным SSIS, а не только на DLL-ссылке. В производственной среде, как правило, даже при установке SSIS без установки самого механизма БД требуется лицензия. – 2013-11-06 19:29:20

+0

[Выполняется программный пакет SSIS] (http://blogs.msdn.com/michen/archive/2007/03/22/running-ssis-package-programmatically.aspx) – 2008-11-07 21:53:53

+0

Может ли кто-нибудь подтвердить комментарий @ JohnSpiegel? Будет ли это работать только в производственной среде, если SSIS установлен? – 2017-11-30 20:11:07

ответ

54

Вот как установить переменные в пакете из кода -

using Microsoft.SqlServer.Dts.Runtime; 

private void Execute_Package() 
    {   
     string pkgLocation = @"c:\test.dtsx"; 

     Package pkg; 
     Application app; 
     DTSExecResult pkgResults; 
     Variables vars; 

     app = new Application(); 
     pkg = app.LoadPackage(pkgLocation, null); 

     vars = pkg.Variables; 
     vars["A_Variable"].Value = "Some value";    

     pkgResults = pkg.Execute(null, vars, null, null, null); 

     if (pkgResults == DTSExecResult.Success) 
      Console.WriteLine("Package ran successfully"); 
     else 
      Console.WriteLine("Package failed"); 
    } 
7

Чтобы добавить @Craig Schwarze ответ,

Вот некоторые связанные с MSDN ссылки:

Loading and Running a Local Package Programmatically:

Loading and Running a Remote Package Programmatically

C apturing События от Running Пакет:

using System; 
using Microsoft.SqlServer.Dts.Runtime; 

namespace RunFromClientAppWithEventsCS 
{ 
    class MyEventListener : DefaultEvents 
    { 
    public override bool OnError(DtsObject source, int errorCode, string subComponent, 
     string description, string helpFile, int helpContext, string idofInterfaceWithError) 
    { 
     // Add application-specific diagnostics here. 
     Console.WriteLine("Error in {0}/{1} : {2}", source, subComponent, description); 
     return false; 
    } 
    } 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     string pkgLocation; 
     Package pkg; 
     Application app; 
     DTSExecResult pkgResults; 

     MyEventListener eventListener = new MyEventListener(); 

     pkgLocation = 
     @"C:\Program Files\Microsoft SQL Server\100\Samples\Integration Services" + 
     @"\Package Samples\CalculatedColumns Sample\CalculatedColumns\CalculatedColumns.dtsx"; 
     app = new Application(); 
     pkg = app.LoadPackage(pkgLocation, eventListener); 
     pkgResults = pkg.Execute(null, null, eventListener, null, null); 

     Console.WriteLine(pkgResults.ToString()); 
     Console.ReadKey(); 
    } 
    } 
} 
14

Вот как к нему с каталогом SSDB, который был введен с SQL Server 2012 ...

using System.Collections.Generic; 
using System.Collections.ObjectModel; 
using System.Data.SqlClient; 

using Microsoft.SqlServer.Management.IntegrationServices; 

public List<string> ExecutePackage(string folder, string project, string package) 
{ 
    // Connection to the database server where the packages are located 
    SqlConnection ssisConnection = new SqlConnection(@"Data Source=.\SQL2012;Initial Catalog=master;Integrated Security=SSPI;"); 

    // SSIS server object with connection 
    IntegrationServices ssisServer = new IntegrationServices(ssisConnection); 

    // The reference to the package which you want to execute 
    PackageInfo ssisPackage = ssisServer.Catalogs["SSISDB"].Folders[folder].Projects[project].Packages[package]; 

    // Add a parameter collection for 'system' parameters (ObjectType = 50), package parameters (ObjectType = 30) and project parameters (ObjectType = 20) 
    Collection<PackageInfo.ExecutionValueParameterSet> executionParameter = new Collection<PackageInfo.ExecutionValueParameterSet>(); 

    // Add execution parameter (value) to override the default asynchronized execution. If you leave this out the package is executed asynchronized 
    executionParameter.Add(new PackageInfo.ExecutionValueParameterSet { ObjectType = 50, ParameterName = "SYNCHRONIZED", ParameterValue = 1 }); 

    // Add execution parameter (value) to override the default logging level (0=None, 1=Basic, 2=Performance, 3=Verbose) 
    executionParameter.Add(new PackageInfo.ExecutionValueParameterSet { ObjectType = 50, ParameterName = "LOGGING_LEVEL", ParameterValue = 3 }); 

    // Add a project parameter (value) to fill a project parameter 
    executionParameter.Add(new PackageInfo.ExecutionValueParameterSet { ObjectType = 20, ParameterName = "MyProjectParameter", ParameterValue = "some value" }); 

    // Add a project package (value) to fill a package parameter 
    executionParameter.Add(new PackageInfo.ExecutionValueParameterSet { ObjectType = 30, ParameterName = "MyPackageParameter", ParameterValue = "some value" }); 

    // Get the identifier of the execution to get the log 
    long executionIdentifier = ssisPackage.Execute(false, null, executionParameter); 

    // Loop through the log and do something with it like adding to a list 
    var messages = new List<string>(); 
    foreach (OperationMessage message in ssisServer.Catalogs["SSISDB"].Executions[executionIdentifier].Messages) 
    { 
     messages.Add(message.MessageType + ": " + message.Message); 
    } 

    return messages; 
} 

Код представляет собой небольшое приспособление http://social.technet.microsoft.com/wiki/contents/articles/21978.execute-ssis-2012-package-with-parameters-via-net.aspx?CommentPosted=true#commentmessage

Существует также аналогичная статья: http://domwritescode.com/2014/05/15/project-deployment-model-changes/

Смежные вопросы