У меня есть приложение, где всякий раз, когда файл загружается в каталог, я должен вызвать SSIS для анализа XML-файла.Как я могу вызвать SSIS программно из .NET?
Можно ли вызвать SSIS непосредственно из службы .NET Windows?
У меня есть приложение, где всякий раз, когда файл загружается в каталог, я должен вызвать SSIS для анализа XML-файла.Как я могу вызвать SSIS программно из .NET?
Можно ли вызвать SSIS непосредственно из службы .NET Windows?
Running SSIS package programmatically.
Я предпочитаю второй метод:
процесс Start dtexec.exe. DTEXEC - это утилита командной строки для выполнения пакетов SSIS. См. Здесь параметры командной строки: http://msdn2.microsoft.com/en-us/library/ms162810.aspx
Преимущества: работающий пакет из надежной надежности процессов. Может использоваться с любого языка программирования (включая .NET 1.1 :)). Легко передавать параметры, задавая значения переменных.
Недостатки: Также местные. Сложнее получить информацию о прогрессе пакета (но регистрация SSIS может дать вам большую часть функциональности). Некоторые издержки при запуске нового процесса (вероятно, минимальные по сравнению с временем выполнения для больших пакетов).
ASP.NET: функция Win32 CreateProcess игнорирует олицетворение потока. Поэтому, если вы хотите, чтобы DTEXEC выполнялся под учетной записью, отличной от учетной записи процесса ASP.NET, вы должны либо ввести имя пользователя/пароль, либо передать его в Process.Start, либо использовать метод, описанный в следующем KB, чтобы запустить дочерний процесс под имперсональной учетной записью http://support.microsoft.com/kb/889251 ,
Вы можете вызвать программу SSIS программно, выполнить пакет и изменить конфигурацию из .NET-кода с использованием среды выполнения DTS. Here is complete code of how you can do it.
вы можете запустить пакет SSIS программно, следующим образом:
using System;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
namespace ConsoleApplicationSSIS
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Loading SSIS Service...");
//Application object allows load your SSIS package
Application app = new Application();
//In order to retrieve the status (success or failure) after running SSIS Package
DTSExecResult result ;
//Specify the location of SSIS package - dtsx file
string SSISPackagePath = @"C:\Microsofts\BI\SSIS\ConsoleApplicationSSIS\IntegrationServiceScriptTask\Package.dtsx";
//Load your package
Package pckg = (Package)app.LoadPackage(SSISPackagePath,true,null);
//Execute the package and retrieve result
result = pckg.Execute();
//Print the status success or failure of your package
Console.WriteLine("{0}", result.ToString());
Console.ReadLine();
}
}
}
если вы хотите полный образец, перейдите по ссылке: Http: //hassanboutougha.wordpress.com/2012/10/13/run- ваш-ssis-package-progammatically/
Я объясню, как создать простой пакет SSIS и после того, как его программным путем назвать из консольного приложения. Не забудьте сделать эту сборку: C: \ Program Files (x86) \ Microsoft SQL Server \ 100 \ SDK \ Assemblies \ Microsoft.SQLServer.DTSRuntimeWrap.dll для ссылки на пространство имен sys runtime
Вы также можете передать свои переменные программно и изменять также исходные и целевые соединения вашего пакета SIS.
Вы можете вызвать пакет SSIS из своей службы Windows. Но Microsoft.SqlServer.Dts должен быть установлен в систему, в которой будут запускаться службы Windows. Если вы установили DTS, установленную на этом компьютере, напрямую вызовите пакет SSIS. Если он не установлен, вы должны сделать следующее.
EXEC msdb.dbo.sp_start_job N'YourJobName '
Надеюсь, это поможет!
Обновление это довольно старый вопрос:
В SQL Server 2012 вы можете сделать это просто путем создания хранимой процедуры, которая будет вызывать к create_execution
и set_execution_parameter
Шаг за шагом руководство можно найти здесь: https://blogs.msdn.microsoft.com/biblog/2013/05/07/step-by-step-of-executing-ssis-2012-package-through-stored-procedure/
Выгода запуска пакета в сервис/.net приложения: Вы можете передать объекты переменной коллекции вашего пакета. (Попробуйте передать объект dtexec ...) – thijs