.NET থেকে কীভাবে একটি এসআইএসআইএস প্যাকেজ চালানো যায়?


87

আমার একটি এসআইএসআই প্যাকেজ রয়েছে যা শেষ পর্যন্ত আমি প্যারামিটারগুলিও পাস করতে চাই these কিভাবে এটি করতে।

সুতরাং মূলত আমি .NET থেকে একটি এসএসআইএস প্যাকেজ কার্যকর করতে চাই এসএসআইএস প্যাকেজ পরামিতি যা এটি এর মধ্যে ব্যবহার করতে পারে passing

উদাহরণস্বরূপ, এসএসআইএস প্যাকেজটি একটি এসকিউএল ডিবিতে আমদানি করে ফ্ল্যাট ফাইলটি ব্যবহার করবে তবে ফাইলের পথ এবং নাম প্যারামিটার হতে পারে যা নেট অ্যাপ্লিকেশন থেকে পাস করা হয়েছিল।



10
ভবিষ্যতের পাঠকদের জন্য: নীচের সমাধানটি ব্যবহার করার আগে, আপনার লাইসেন্স পর্যালোচনা করুন। আমি বিশ্বাস করি এটি কেবলমাত্র ডিএসএল রেফারেন্স নয়, এসএসআইএস ইনস্টল থাকা মেশিনগুলিতে কাজ করে। উত্পাদনের পরিবেশে, সাধারণত এমনকি ডিবি ইঞ্জিন ইনস্টল না করে এসএসআইএস ইনস্টল করার জন্যও লাইসেন্সের প্রয়োজন হয়।
জন স্পিগেল

@ জনস্পিলের মন্তব্যটি কেউ নিশ্চিত করতে পারবেন? এসএসআইএস ইনস্টল করা থাকলে এটি কি কেবল উত্পাদন পরিবেশে কাজ করবে?
জোশ নোয়ে

এফওয়াইআই, রানিং এসএসআইএস প্যাকেজ প্রোগ্রামিংয়ের লিঙ্কটি ডকস.মাইক্রোসফট
en-

উত্তর:


59

কোড থেকে প্যাকেজে কীভাবে ভেরিয়েবল সেট করবেন -

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

4
@ আইয়ান ক্যাম্পবেল আমি ধরে নিয়েছি আপনি মাইক্রোসফ্ট.স্কুলসার্ভার.ডিটিএস.রুনটাইম উল্লেখ করছেন? ডিটিএস হ'ল এসএসআইএসের উত্তরাধিকারের নাম - এটি কেবলমাত্র নাম স্থানের ঘোষণা। উপরের কোডটি এগিয়ে যেতে সমর্থিত।
স্পিকেহ

4
@ আইয়ান ক্যাম্পবেল হ্যাঁ, ডিটিএস অবমূল্যায়ন করা হয়েছে (আসলে, আমি মনে করি না যে আপনি এসকিউএল সার্ভারের সর্বশেষ সংস্করণ দিয়েও ডিটিএস ব্যবহার করতে পারবেন - এমন নয় যে আমি এটি সন্ধান করার চেষ্টা করেছি!)। তবে এস.এস.আই.এস. উপাদানগুলির কয়েকটি অন্তর্ভুক্ত। নেট নেমস্পেসে এখনও ডিটিএস শব্দটি রয়েছে। আমি আপনাকে আশ্বাস দিচ্ছি এটি বর্তমান সংস্করণ এবং বৈধ।
স্পিকেহ

4
ঠিক আছে, ধন্যবাদ @ স্পিকেহ! দ্রষ্টব্য, যখন আমি সম্প্রতি ডিটিএসের সাথে এসএসআইএস প্যাকেজ লোড করার জন্য অনুরূপ কোডটি প্রয়োগ করেছি, তখন এই কোডটি সংকলন করতে আমাকে ফোল্ডারে Microsoft.SqlServer.ManagedDTS.dll"জিএসি" থেকে ম্যানুয়ালি ফাইলটি গ্রহণ করতে হয়েছিল C:\Windows\assembly
ইয়ান ক্যাম্পবেল

4
হ্যাঁ, আমিও তাই করেছি - গতকালও আমি একই করছিলাম! আমি ভিএস2012 এবং। নেট 4 (এসআইএসআই প্যাকেজের জন্য) / 4.5 ব্যবহার করছি (আমার ইউনিট পরীক্ষার জন্য)। আমাকে সি: \ উইন্ডোজ \ মাইক্রোসফ্ট.নাইট \ অ্যাসেমব্লিলি \ জিএসি_এমএসআইএল \ মাইক্রোসফট.সকিএল সার্ভার.ম্যানেজডডিটিএস \ v4.0_11.0.0.0__89845dcd8080cc91 থেকে অ্যাসেম্বলিটি পেতে হয়েছিল কারণ এটি অন্য কোনও সমাবেশ ফোল্ডারে বা এর মধ্যে নেই as এসকিউএল ফোল্ডারগুলি।
স্পিকেহ

4
এমএসডিএন-এর কয়েকটি লিঙ্ক: 1) স্থানীয় প্যাকেজ (একই মেশিন): এমএসডিএন.মাইক্রোসফটকম /en-us/library/ms136090.aspx । 2) রিমোট প্যাকেজ (যেখানে প্রোগ্রাম চলছে তার তুলনায় অন্য কোনও মেশিনে সঞ্চিত), এসকিউএল এজেন্ট কাজ ব্যবহার করে: এমএসডিএন.মাইক্রোসফটকম /en-us/library/ms403355.aspx
ফয়েজ

22

এসকিউএল সার্ভার ২০১২ এর সাথে প্রবর্তিত এসএসডিবি ক্যাটালগের সাথে এটি কীভাবে করা যায় তা এখানে ...

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.mic Microsoft.com/wiki/contents/articles/21978.execute-ssis-2012-package-with-paraters-via-net.aspx?CommentPosted=true#commentmessage এর সামান্য অভিযোজন

এখানে একটি অনুরূপ নিবন্ধও রয়েছে http://domwritescode.com/2014/05/15/project-depدام-model-changes/


মাইক্রোসফট.সক্লসারভার.ম্যানেজমেন্ট.ইনটিগ্রেশন সার্ভিস.ডিল কোথায় অবস্থিত? আমি এসকিউএল ২০১৪ ইনস্টল করেছি এবং এটি উইন্ডোজ অনুসন্ধান করে খুঁজে পাচ্ছি না।

4
স্পষ্টতই এটি কেবল জিএসি-তে রয়েছে: মাইক্রোসফ্ট.এসএইচএল

আমি কি প্যাকেজ স্থাপনার সাথে উপরের কোডটি ব্যবহার করতে পারি? আমি কোনও পদ্ধতি খুঁজে পেলাম না।
মনীশ জৈন

7

@ ক্রেইগ শোয়ার্জে উত্তর যুক্ত করতে,

এখানে কিছু এমএসডিএন সম্পর্কিত লিঙ্ক রয়েছে:

স্থানীয়ভাবে প্যাকেজ প্রোগ্রামিংভাবে লোড করা এবং চালানো হচ্ছে:

প্রোগ্রামিংয়ে রিমোট প্যাকেজ লোড করা এবং চালানো হচ্ছে

একটি চলমান প্যাকেজ থেকে ইভেন্ট ক্যাপচার:

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

1

সুতরাং অন্য কোনও উপায় রয়েছে যা আপনি যেকোন ভাষা থেকে প্রকৃতপক্ষে চালিয়ে যেতে পারেন। আমি মনে করি সর্বোত্তম উপায়, আপনি কেবল একটি ব্যাচ ফাইল তৈরি করতে পারেন যা আপনার .dtsx প্যাকেজটিকে কল করবে।

পরবর্তী আপনি যে কোনও ভাষা থেকে ব্যাচ ফাইলটি কল করুন। উইন্ডোজ প্ল্যাটফর্মের মতো, আপনি যে কোনও জায়গা থেকে ব্যাচ ফাইল চালাতে পারেন, আমি মনে করি এটি আপনার উদ্দেশ্যটির জন্য সবচেয়ে সাধারণ পন্থা হবে। কোনও কোড নির্ভরতা নেই।

নীচে আরও বিশদ জন্য একটি ব্লগ ..

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

শুভ কোডিং .. :)

ধন্যবাদ, আয়ান


0

এসএসআইএসে আপনার কিছু পরিবর্তনশীল থাকলে আপনি এই ফাংশনটি ব্যবহার করতে পারেন।

    Package pkg;

    Microsoft.SqlServer.Dts.Runtime.Application app;
    DTSExecResult pkgResults;
    Variables vars;

    app = new Microsoft.SqlServer.Dts.Runtime.Application();
    pkg = app.LoadPackage(" Location of your SSIS package", null);

    vars = pkg.Variables;

    // your variables
    vars["somevariable1"].Value = "yourvariable1";
    vars["somevariable2"].Value = "yourvariable2";

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

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

        Console.WriteLine("Package failed");
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.