データベースにある SSIS パッケージをプログラムで実行しようとしています。
私はこのAPIを使用しています:
Imports Microsoft.SqlServer.Dts.Runtime
パッケージへの (データベース内の) パスを説明する画像がありますが、 LoadFromSqlServerメソッドでpackagePathプロパティを適切に設定する方法がわかりません。
データベース内のパッケージ パスを説明する画像を次に示します。
データベースにある SSIS パッケージをプログラムで実行しようとしています。
私はこのAPIを使用しています:
Imports Microsoft.SqlServer.Dts.Runtime
パッケージへの (データベース内の) パスを説明する画像がありますが、 LoadFromSqlServerメソッドでpackagePathプロパティを適切に設定する方法がわかりません。
データベース内のパッケージ パスを説明する画像を次に示します。
Microsoft.SqlServer.Management.IntegrationServices への参照を追加する必要があります。私の場合、SQL Server フォルダーには表示されず、GAC でしか見つかりませんでした。
C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.Management.IntegrationServices\11.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.Management.IntegrationServices.dll
そのアセンブリからへの依存関係もあります
C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.Management.Sdk.Sfc\11.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.Management.Sdk.Sfc.dll
Sub Main()
'
' Do not fault me for my poor VB skills nor my lack of error handling
' This is bare bones code adapted from
' http://blogs.msdn.com/b/mattm/archive/2011/11/17/ssis-and-powershell-in-sql-server-2012.aspx
Dim folderName As String
Dim projectName As String
Dim serverName As String
Dim packageName As String
Dim connectionString As String
Dim use32BitRuntime As Boolean
Dim executionId As Integer
Dim integrationServices As Microsoft.SqlServer.Management.IntegrationServices.IntegrationServices
Dim catalog As Microsoft.SqlServer.Management.IntegrationServices.Catalog
Dim catalogFolder As Microsoft.SqlServer.Management.IntegrationServices.CatalogFolder
Dim package As Microsoft.SqlServer.Management.IntegrationServices.PackageInfo
' Dimensions in your example
folderName = "SSISHackAndSlash"
' dimCalendar in your example
projectName = "SSISHackAndSlash2012"
serverName = "localhost\dev2012"
' dimCalendar in your example (no file extension)
packageName = "TokenTest.dtsx"
connectionString = String.Format("Data Source={0};Initial Catalog=msdb;Integrated Security=SSPI;", serverName)
integrationServices = New Microsoft.SqlServer.Management.IntegrationServices.IntegrationServices(New System.Data.SqlClient.SqlConnection(connectionString))
' There is only one option for an SSIS catalog name as of this posting
catalog = integrationServices.Catalogs("SSISDB")
' Find the catalog folder. Dimensions in your example
catalogFolder = catalog.Folders(folderName)
' Find the package in the project folder
package = catalogFolder.Projects(projectName).Packages(packageName)
' Run the package. The second parameter is for environment variables
executionId = package.Execute(use32BitRuntime, Nothing)
End Sub
SQLサーバーに展開されているパッケージの場所を検索する場合。
LoadFromSqlServer
サーバー名はメソッドのパラメーターになるため、無視してください。
したがって、パッケージパスは次のようになります:\ Stored Package \ MSDB \ Data Collector\PerfCountersUpload。
お役に立てれば。
ビリンクの回答に加えて。
コードの C# バージョンは次のとおりです。
string folderName = "name";
string projectName = "name";
string serverName = "localhost";
string packageName = "name";
string connectionString = string.Format("Data Source={0};Initial Catalog=msdb;Integrated Security=SSPI;", serverName);
var integrationServices = new IntegrationServices(newSystem.Data.SqlClient.SqlConnection(connectionString));
var catalog = integrationServices.Catalogs["SSISDB"];
var catalogFolder = catalog.Folders[folderName];
var package = catalogFolder.Projects[projectName].Packages[packageName];
long execId = package.Execute(false, null);
私の場合、4 つの dll を追加する必要がありました。
Microsoft.SqlServer.ConnectionInfo.dll
Microsoft.SqlServer.Management.IntegrationServices.dll
Microsoft.SqlServer.Management.Sdk.Sfc.dll
Microsoft.SqlServer.Smo.dll
すべての依存関係を見つけることができますC:\Windows\assembly\GAC_MSIL\