У меня есть пакет SSIS, который в конце концов я тоже хотел бы передать параметры, эти параметры будут получены из .NET-приложения (VB или C#), поэтому мне было любопытно, знает ли кто-нибудь, как это сделать, или, еще лучше, веб-сайт с полезные советы о том, как это сделать. Поэтому в основном я хочу выполнить пакет SSIS из .NET, передавая параметры пакета SSIS, которые он может использовать в нем. Например, пакет SSIS будет использовать плоский импорт файлов в SQL db, однако путь и имя файла могут быть параметром, который передается из приложения .Net.Как выполнить пакет SSIS из .NET?
74
A
ответ
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/
Смежные вопросы
- 1. Как выполнить пакет SSIS 2008 из .NET 4.0 Windows Service?
- 2. Как выполнить пакет SSIS 2008
- 3. выполнить пакет SSIS
- 4. Не удается выполнить пакет SSIS из vb6
- 5. Пакет SSIS Не удается выполнить
- 6. Невозможно запустить пакет SSIS из Xp_cmdshell, вызванный из .nET Aplication
- 7. Как выполнить пакет SSIS из приложения Windows VB.NET?
- 8. Как позвонить пакет SSIS
- 9. Как выполнить пакет Microsoft CRM SSIS без полного SQL Server?
- 10. Выполнить удаленный пакет ssis с помощью dtexec
- 11. выполнить пакет SSIS с конфигурационным файлом из другого файла dtsx
- 12. выполнить SSIS или пакет DTS асинхронно из ASP.NET
- 13. Как выполнить ping из пакета SSIS?
- 14. Как выполнить пакет SSIS, установленный в SQL Server в триггере
- 15. Как выполнить 32-разрядный пакет SSIS в 64-битном пакете?
- 16. Как создать пакет динамических SSIS?
- 17. родительский пакет в SSIS
- 18. Вызов пакета SSIS из .Net
- 19. Как выполнить пакет SSIS при поступлении файла в папку
- 20. Пакет SSIS не запускается
- 21. Пакет SSIS не запущен из сохраненного Proc?
- 22. Развертывание и вызов пакета SSIS из .NET
- 23. Как запустить пакет SSIS сразу?
- 24. Как выполнить несколько пакетов ssis из C#
- 25. Как выполнить скрипт PowerShell из SSIS
- 26. SSIS пакет OnError Logging
- 27. Приложение VB.NET не удается выполнить пакет SSIS, получает ошибку COM
- 28. Как извлечь данные из SAP через пакет SSIS?
- 29. SSIS пакет не удалось
- 30. Как выполнить конкретную задачу из пакета ssis с помощью C#?
К будущим читателям: Прежде чем использовать решение ниже, просмотрите свое лицензирование. Я считаю, что это работает только на машинах с установленным SSIS, а не только на DLL-ссылке. В производственной среде, как правило, даже при установке SSIS без установки самого механизма БД требуется лицензия. – 2013-11-06 19:29:20
[Выполняется программный пакет SSIS] (http://blogs.msdn.com/michen/archive/2007/03/22/running-ssis-package-programmatically.aspx) – 2008-11-07 21:53:53
Может ли кто-нибудь подтвердить комментарий @ JohnSpiegel? Будет ли это работать только в производственной среде, если SSIS установлен? – 2017-11-30 20:11:07