ローカル コンピューターでのプログラムによる SSIS パッケージの実行
数行のマネージ コードを用意してローカル コンピューターに関する適切な前提条件を満たすだけで、カスタム アプリケーションからパッケージを実行することができます。カスタム アプリケーションとしては、Windows フォーム アプリケーション、コンソール アプリケーション、ASP.NET Web フォームや Web サービス、または Windows サービスがあります。
注 |
---|
Integration Services パッケージを必要に応じて実行したり、事前に定義した時刻に実行したりする場合は、トピック「パッケージの実行」で説明されているメソッドを使用します。 |
このトピックのセクション
|
ローカル コンピューターの前提条件
パッケージは、パッケージを起動するアプリケーションと同じコンピューターで実行されます。したがって、アプリケーションが、別のコンピューター上にリモートに格納されたパッケージを読み込むと、そのパッケージはローカル コンピューターで実行されます。
その結果、ローカル コンピューターにパッケージを読み込んで実行するためには、いくつかの前提条件を満たす必要があります。
パッケージの外部にあるリソースへの参照がパッケージに含まれる場合、これらの参照は、ローカル コンピューター上で有効な参照であることが必要です。このような参照としては、接続文字列、サーバー、ファイル、メッセージ キューなどがあります。
注 パッケージの外部にあるリソースへの有効な参照がローカル コンピューターに存在しない場合、パッケージをローカル コンピューター上で実行することはできません。その代わり、パッケージをリモート コンピュター上で確実に実行できるようにする必要があります。詳細については、「リモート コンピューターでのプログラムによる SSIS パッケージの実行」を参照してください。
ユーザーは、ローカル コンピューター上にあるデータ ソースやその他のリソースにパッケージがアクセスする際に必要となる権限をすべて保持している必要があります。
パッケージを開発環境 Business Intelligence Development Studio の外部で実行することができるのは、そのコンピューターに Integration Services がインストールされている場合のみです。
注 SQL Server ライセンス供与の条件によっては、Integration Services を追加のコンピューターにインストールできないことがあります (Integration Services はサーバー コンポーネントであるため、クライアントおよびローカル コンピューターに再配布できません)。Integration Services が、ローカル コンピューターにインストールされておらず、またインストールできない場合には、パッケージをリモート コンピューター上で確実に実行できるようにする必要があります。詳細については、「リモート コンピューターでのプログラムによる SSIS パッケージの実行」を参照してください。
SSIS パッケージをローカル コンピューターに読み込んで実行するアプリケーションの作成
このトピックでは、パッケージをプログラムで読み込んで実行するすべてのメソッドに、Microsoft.SqlServer.ManagedDTS アセンブリへの参照が必要です。この参照を新しいプロジェクトに追加した後、C# の using ステートメントまたは Visual Basic の Imports ステートメントを使用して、Microsoft.SqlServer.Dts.Runtime 名前空間をインポートします。
SSIS パッケージを読み込むメソッド
プログラムによってパッケージをローカル コンピューターに読み込むには、パッケージがローカルとリモートのどちらに保存されているかに関係なく、次の表に示したいずれかのメソッドを呼び出します。これらのメソッドはいずれも Package オブジェクトを返します。これを使用して、パッケージを実行したりパッケージのプロパティを調べたりすることができます。
ストレージの場所 |
呼び出すメソッド |
---|---|
ファイル |
- または - |
SSIS パッケージ ストア |
注
SSIS パッケージ ストアを操作するための Application クラスのメソッドは、"."、localhost、またはローカル サーバーのサーバー名のみをサポートします。"(local)" は使用できません。
|
SQL Server |
SSIS パッケージを実行するメソッド
ローカル コンピューターでパッケージをプログラムによって実行するには、前のセクションで説明した方法でパッケージを読み込んでから、パッケージの Execute メソッドを呼び出します。
例
次の手順を使用して、ローカル コンピューターにパッケージを読み込んで実行するマネージ コードのカスタム アプリケーションを開発します。この手順の後に、この手順での各ステップを具体的に表すサンプル コンソール アプリケーションを示します。
プログラムによってローカル コンピューターにパッケージを読み込んで実行するには
Visual Studio 開発環境を起動し、必要な開発言語で新しいアプリケーションを作成します。
この例では、コンソール アプリケーションを使用します。ただし、Windows フォーム アプリケーション、ASP.NET Web フォームや Web サービス、または Windows サービスからパッケージを実行することもできます。
[プロジェクト] メニューの [参照の追加] をクリックし、Microsoft.SqlServer.ManagedDTS.dll への参照を追加します。[OK] をクリックします。
Visual Basic の Imports ステートメント、または C# の using ステートメントを使用して、Microsoft.SqlServer.Dts.Runtime 名前空間をインポートします。
メイン ルーチンで、この手順の後に続くサンプル コードを追加します。
完成したコンソール アプリケーションは、次のセクションに示したサンプル コードのようになります。
注 このサンプル コードは、LoadPackage メソッドを使用してファイル システムからパッケージを読み込む方法を示していますが、LoadFromSqlServer メソッドを呼び出して msdb データベースからパッケージを読み込んだり、LoadFromDtsServer メソッドを呼び出して Integration Services パッケージ ストアからパッケージを読み込むこともできます。
プロジェクトを実行します。
このサンプル コードでは、SQL Server のサンプルと共にインストールされている CalculatedColumns サンプル パッケージを実行します。パッケージの実行結果がコンソール ウィンドウに表示されます。
サンプル コード
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();
}
}
}
実行中の SSIS パッケージからのイベントのキャプチャ
前のセクションのサンプルで示したようにプログラムを使用してパッケージを実行するときに、パッケージの実行時に発生するエラーやその他のイベントをキャプチャすることが必要になる場合もあります。イベントのキャプチャは、DefaultEvents クラスから継承するクラスを追加し、パッケージを読み込むときにそのクラスへの参照を渡すことによって行うことができます。次の例では OnError イベントのみがキャプチャされますが、DefaultEvents クラスによってキャプチャできるイベントは他にも多数あります。
プログラムによってローカル コンピューターでパッケージを実行し、パッケージ イベントをキャプチャするには
前のセクションに示した例の手順に従って、この例のプロジェクトを作成します。
メイン ルーチンで、この手順の後に示すサンプル コードを追加します。
完成したコンソール アプリケーションは、たとえば次の例のようになります。
プロジェクトを実行します。
このサンプル コードでは、SQL Server のサンプルと共にインストールされている CalculatedColumns サンプル パッケージを実行します。パッケージ実行結果は、発生したエラーと共にコンソール ウィンドウに表示されます。
サンプル コード
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();
}
}
}
|