2015-08-04 14 views
5

Mam pakiet SSIS, który ma kilka zestawów Project.params.Przekaż parametry SSIS z C#

Jak przekazać wartości tych parametrów do pakietu SSIS przez C#?

Próbuję następujące:

const string pkgLocation = @"export.dtsx"; 
var app = new Application(); 
var pkg = app.LoadPackage(pkgLocation, null); 

var results = pkg.Execute(); 

ta zwraca niepowodzenie, z kolekcji Błędy zawierające „Zmienna«$ Projekt :: connString»nie została znaleziona w zbiorze zmiennych zmienna może nie istnieć. we właściwym zakresie. "

Więc próbowałem dodając

var param = pkg.Parameters.Add("connString", TypeCode.String); 
param.Value = "test"; 
var results = pkg.Execute(); 

Ale to rzuca DtsGenericException.

+0

Sprawdź dokumentację metody 'LoadPackage'. Jest to metoda przeciążona i powinna istnieć taka, która akceptuje 5 parametrów, co byłoby jednym ze sposobów robienia tego. Och, to jest parametr projektu. Nie rozpocząłem pakietu przez .net, który używa modelu wdrażania projektu. Podejrzewam, że będziesz potrzebować więcej kodu, ponieważ będziesz potrzebował odwoływać się do ispac projektu, aby mieć świadomość istnienia elementów na poziomie projektu. – billinkc

+0

Błąd wspomina kolekcję zmiennych i parametry ... czy próbowałeś dodać ją do zmiennych? 'pkg.Variables.Add (" connString ", false," Project "," test ");' (zakładając, że przestrzenią nazw twoich zmiennych jest "Projekt") – nemesv

+0

Spróbuj użyć metody przeciążenia Execute obiektu Package, która pobiera zbiór zmiennych . https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.dts.runtime.dtscontainer.execute.aspx – Alessi

Odpowiedz

-1

Wierzę, że będziesz musiał użyć klasy ParameterValue.

serwis
var parameters = new ParameterValue[somelength]; 
parameters[index] = new ParameterValue() 
{ 
    Name = "parameter name", 
    Value = "parameter value" 
} 

Raport będzie mieć metodę:

SetExecutionParmeters(parameters, language). 

jestem zakładając ładujesz raportu „export.dtsx”, do SSIS i wykonywanie za pośrednictwem serwisu raportu.

+0

Nie, to SSIS nie SSRS. –

3

Myślę, że dostałem to. Sztuką jest deserializacja twojego pliku ispac (VS buduje to, ale możesz może zrobić to przez msbuild) do obiektu Project. Obiekt Project pozwala nam ustawiać parametry poziomu projektu (jak również dostęp do menedżerów połączeń na poziomie projektu).

Stamtąd musimy uzyskać odniesienie do konkretnego pakietu, który chcemy, ale będzie to PackageItem. PackageItems nie można uruchomić, ale mają właściwości pakietu będziemy używać do instancji klasy Package który robi mieć Execute metoda

public static void final() 
    { 
     string isPacPath = @"C:\sandbox\so_31812951\so_31812951\bin\Development\so_31812951.ispac"; 
     string packageName = "Package.dtsx"; 
     Application app = new Application(); 
     Package pkg = null; 

     // https://msdn.microsoft.com/en-us/library/ff930196(v=sql.110).aspx 
     Project proj = null; 
     PackageItem pi = null; 
     DTSExecResult results; 

     /////////////////////////////////////////////////////////////////// 
     // Run an SSIS package that has a Project parameter 
     /////////////////////////////////////////////////////////////////// 
     proj = Project.OpenProject(isPacPath); 

     // Yes, I can see the packages in there 
     foreach (var item in proj.PackageItems) 
     { 
      Console.WriteLine(string.Format("Project {0} contains package {1}", proj.Name, item.StreamName)); 
     } 

     //Also able to see the project level parameters 
     foreach (Parameter item in proj.Parameters) 
     { 
      Console.WriteLine(string.Format("Project {0} contains parameter {1} type of {2} current value {3}", proj.Name, item.Name, item.DataType, item.Value)); 
     } 

     // assign a value to my project level parameter 
     proj.Parameters["ProjectParameter"].Value = 10; 

     // Get the package from the project collection 
     pi = proj.PackageItems[packageName]; 

     // Convert the package into a package object 
     pkg = pi.Package; 

     // This is how we specify a package parameter value 
     pkg.Parameters["PackageParam"].Value = 777; 

     results = pkg.Execute(); 

     Console.WriteLine(results); 
    } 

Zakłada masz projekt SSIS nazywa so_31812951 który skompilowany do ispac znajduje w C: \ sandbox \ so_31812951 \ so_31812951 \ bin \ Development \ so_31812951.ispac Ten projekt ma jeden pakiet o nazwie Package.dtsx. Zostanie wyświetlony parametr Project level, Int32, o nazwie ProjectParameter, a także parametr poziomu pakietu, Int32, o nazwie PackageParam