Программная загрузка и запуск локального пакета
Пакеты служб Integration Services можно выполнять по мере необходимости или в заранее определенное время с помощью методов, описанных в разделе Выполнение пакетов. Однако с помощью всего нескольких строк кода можно выполнить пакет из пользовательского приложения, такого как приложение Windows Forms, приложение командной строки, веб-форма ASP.NET, веб-служба или служба Windows.
В данном разделе рассматриваются следующие темы.
Программная загрузка пакета.
Программное выполнение пакета.
Все методы, используемые в данном разделе для загрузки и выполнения пакетов, требуют наличия ссылки на сборку Microsoft.SqlServer.ManagedDTS. После добавления ссылки в новый проект импортируйте пространство имен Microsoft.SqlServer.Dts.Runtime с помощью инструкции using или Imports.
Программная загрузка пакета
Чтобы загрузить хранящийся локально или удаленно пакет на локальный компьютер программным путем, вызовите один из перечисленных далее методов.
Место хранения |
Вызываемый метод |
---|---|
Файл |
или |
Хранилище пакетов служб SSIS |
|
SQL Server |
Важно! |
---|
Методы класса Application для работы с хранилищем пакетов служб SSIS поддерживают только «.», localhost и имя сервера для локального сервера. Нельзя использовать имя «(local)». |
Программное выполнение пакета
Разработка пользовательского приложения в управляемом коде, которое выполняет пакет на локальном компьютере, осуществляется следующим образом. Приведенные здесь шаги проиллюстрированы образцом приложения командной строки, приведенным далее.
Программное выполнение пакета на локальном компьютере
Запустите среду разработки Visual Studio и создайте новое приложение на языке программирования по своему выбору. В этом образце используется приложение командной строки. Однако выполнить пакет можно также из приложения Windows Forms, веб-формы ASP.NET, веб-службы или службы Windows.
Выберите в меню Проект пункт Добавить ссылку и добавьте ссылку на библиотеку Microsoft.SqlServer.ManagedDTS.dll. Нажмите ОК.
Используйте инструкцию Visual Basic Imports или инструкцию C# using, чтобы импортировать пространство имен Microsoft.SqlServer.Dts.Runtime.
Добавьте следующий код в подпрограмму main. В следующем примере представлен полный код приложения командной строки.
Примечание Данный образец кода иллюстрирует загрузку пакета из файловой системы с помощью метода LoadPackage. Однако пакет можно загрузить также и из базы данных MSDB путем вызова метода LoadFromSqlServer или из пакета служб Integration Services путем вызова метода LoadFromDtsServer.
Запустите проект. В образце кода выполняется пакет образца CalculatedColumns, который устанавливается вместе с образцами SQL Server. Результат выполнения пакета отображается в консольном окне.
Образец кода
Imports Microsoft.SqlServer.Dts.Runtime
Module Module1
Sub Main()
Dim pkgLocation As String
Dim pkg As New Package
Dim app As New Application
Dim pkgResults As DTSExecResult
pkgLocation = _
"C:\Program Files\Microsoft SQL Server\100\Samples\Integration Services" & _
"\Package Samples\CalculatedColumns Sample\CalculatedColumns\CalculatedColumns.dtsx"
pkg = app.LoadPackage(pkgLocation, Nothing)
pkgResults = pkg.Execute()
Console.WriteLine(pkgResults.ToString())
Console.ReadKey()
End Sub
End Module
using System;
using Microsoft.SqlServer.Dts.Runtime;
namespace RunFromClientAppCS
{
class Program
{
static void Main(string[] args)
{
string pkgLocation;
Package pkg;
Application app;
DTSExecResult pkgResults;
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, null);
pkgResults = pkg.Execute();
Console.WriteLine(pkgResults.ToString());
Console.ReadKey();
}
}
}
Перехват событий в выполняющемся пакете
Когда пакет запускается программно, как показано в предыдущем образце, может понадобиться также перехватить ошибки и другие события, возникающие по мере выполнения пакета. Это можно сделать, добавив класс, порожденный из класса DefaultEvents, и передав ссылку на этот класс при загрузке пакета. Хотя следующий пример перехватывает только событие OnError, существует много других событий, которые позволяет перехватывать класс DefaultEvents.
Программное выполнение пакета на локальном компьютере и перехват событий пакета
Пройдите по шагам в предыдущем примере, чтобы создать проект для этого примера.
Добавьте следующий код в подпрограмму main. В следующем примере представлен полный код приложения командной строки.
Запустите проект. В образце кода выполняется пакет образца CalculatedColumns, который устанавливается вместе с образцами SQL Server. Результат выполнения пакета отображается в консольном окне вместе с сообщениями о любых возникших ошибках.
Образец кода
Imports Microsoft.SqlServer.Dts.Runtime
Module Module1
Sub Main()
Dim pkgLocation As String
Dim pkg As New Package
Dim app As New Application
Dim pkgResults As DTSExecResult
Dim eventListener As New EventListener()
pkgLocation = _
"C:\Program Files\Microsoft SQL Server\100\Samples\Integration Services" & _
"\Package Samples\CalculatedColumns Sample\CalculatedColumns\CalculatedColumns.dtsx"
pkg = app.LoadPackage(pkgLocation, eventListener)
pkgResults = pkg.Execute(Nothing, Nothing, eventListener, Nothing, Nothing)
Console.WriteLine(pkgResults.ToString())
Console.ReadKey()
End Sub
End Module
Class EventListener
Inherits DefaultEvents
Public Overrides Function OnError(ByVal source As Microsoft.SqlServer.Dts.Runtime.DtsObject, _
ByVal errorCode As Integer, ByVal subComponent As String, ByVal description As String, _
ByVal helpFile As String, ByVal helpContext As Integer, _
ByVal idofInterfaceWithError As String) As Boolean
' Add application–specific diagnostics here.
Console.WriteLine("Error in {0}/{1} : {2}", source, subComponent, description)
Return False
End Function
End Class
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();
}
}
}
|