Pertanyaan Bagaimana cara mengeksekusi paket SSIS dari .NET?


Saya memiliki paket SSIS yang akhirnya saya ingin melewatkan parameter juga, parameter ini akan berasal dari aplikasi .NET (VB atau C #) jadi saya ingin tahu apakah ada yang tahu bagaimana melakukan ini, atau lebih baik lagi situs web dengan petunjuk bermanfaat tentang cara melakukannya. Jadi pada dasarnya saya ingin menjalankan paket SSIS dari .NET melewati parameter paket SSIS yang dapat digunakan di dalamnya. Sebagai contoh, paket SSIS akan menggunakan file datar yang diimpor ke dalam SQL db namun Path dan nama file bisa menjadi parameter yang dilewatkan dari aplikasi .Net.


75
2017-11-07 21:48


asal


Jawaban:


Berikut adalah cara mengatur variabel dalam paket dari kode -

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");
    }

54
2017-12-17 07:40



Inilah cara melakukannya dengan katalog SSDB yang diperkenalkan dengan 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;
}

Kode ini sedikit adaptasi http://social.technet.microsoft.com/wiki/contents/articles/21978.execute-ssis-2012-package-with-parameters-via-net.aspx?CommentPosted=true#commentmessage

Ada juga artikel serupa di http://domwritescode.com/2014/05/15/project-deployment-model-changes/


17
2018-02-19 09:57



Untuk menambah jawaban @Craig Schwarze,

Berikut beberapa tautan MSDN terkait:

Memuat dan Menjalankan Paket Lokal Secara Terprogram:

Memuat dan Menjalankan Paket Remote Secara Terprogram

Menangkap Peristiwa dari Paket Berlari:

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();
    }
  }
}

7
2017-09-24 08:57



Jadi ada cara lain yang bisa Anda lakukan untuk memecatnya dari bahasa apa pun. Cara terbaik yang saya pikirkan, Anda bisa membuat file batch yang akan memanggil paket .dtsx Anda.

Selanjutnya Anda memanggil file batch dari bahasa apa pun. Seperti pada platform windows, Anda dapat menjalankan file batch dari mana saja, saya pikir ini akan menjadi pendekatan yang paling umum untuk tujuan Anda. Tidak ada ketergantungan kode.

Di bawah ini adalah blog untuk lebih jelasnya ..

https://www.mssqltips.com/sqlservertutorial/218/command-line-tool-to-execute-ssis-packages/

Selamat coding .. :)

Terima kasih, Ayan


0
2018-03-22 06:16