.NETアプリケーションからパッケージを実行するときにSSISパッケージの動的な.mdb接続を設定する方法
質問
現在、バックエンドで.mdb(Access)データベースファイルを使用するVB.NETデスクトップアプリケーションで作業しています。 .mdbファイルは、VB.NETアプリで開かれて編集されます。編集が完了したら、ユーザーはデータをSQL Serverデータベースにインポートする必要があります。動的ファイルパスのシナリオを導入しようとするまで、これは簡単な作業です。
私はSSISでかなりの経験を持っていますが、これに近づくのに苦労しています。ユーザーが選択した.mdbファイルを参照できるWinFormを作成しました。 .mdbファイル名には、一意にするためにタイムスタンプ/日付情報が含まれています。 (私はアプリのこの部分を開発しませんでした。最近、これに取り組み始めました。そのため問題です。
とにかく、動的にファイル名とパスをSSISパッケージに渡す必要があります。 ConnectionStringなどの変数を作成する場所はわかりますが、MS Access(Ole DB、ODBC、またはJet 4.0 for Office?)に使用するデータ接続の詳細と種類は本当にわかりません。 !)
また、パッケージはSOURCEとして.mdbファイルを使用するため、データ接続の接続文字列は動的である必要があると想定しています。しかし、SSISで.mdbファイル用に動的データ接続を作成するにはどうすればよいですか?
そして、SSISパッケージにファイル名/パス文字列を渡すにはどうすればよいですか
現在、次のコードでプロトタイプを作成しています:
'Execute the SSIS_Import package
Dim pkgLocation As String
Dim pkg As New Package
Dim app As New Microsoft.SqlServer.Dts.Runtime.Application
Dim pkgResults As DTSExecResult
Dim eventListener As New EventListener()
Try
pkgLocation = "C:\SSIS_DataTransfer\ImportPackage.dtsx"
'TO-DO: pass databasePath variable to SSIS package here ???
pkg = app.LoadPackage(pkgLocation, eventListener)
pkgResults = pkg.Execute(Nothing, Nothing, eventListener, Nothing, Nothing)
Select Case pkgResults
Case DTSExecResult.Completion
MsgBox("Data import completed!")
Case DTSExecResult.Success
MsgBox("Data import was successful!")
Case DTSExecResult.Failure
MsgBox("Data import was not successful!")
End Select
Catch ex As Exception
MsgBox(ex.Message)
End Try
- .mdbファイルの場所をSSISパッケージに渡すにはどうすればよいですか?おそらくLoadPackage?
- SSISパッケージのデータ接続で動的ファイルの場所を使用するにはどうすればよいですか
動的ではない.mdbファイルをアップロードするのは非常に簡単です。ユーザー選択の動的な側面を導入するまで、ソースと宛先の設定は非常に簡単です。これはSSISでどのように可能ですか?
どんな助けも大歓迎です。 ありがとう。
解決
これにより、使用する接続と実行方法に応じて一部が変更されますが、変数をパッケージに取得することは基本的に同じです。 SSISを使用してからしばらく経ちましたが、少しずれているかもしれません。ただし、最初の手順を理解すれば、ほとんどの場合簡単です。
パッケージに変数を取得するには:
- ファイル名を保持する変数をパッケージに作成します。デザイナー画面をクリックして、パッケージレベルのスコープであることを確認し、[変数]ウィンドウを開いて、[新規]をクリックし、変数の名前(" filePath")、タイプ(" String")を指定し、デフォルト値を指定します。
- VB.Netコードから変数を設定します:
VB.NETの場合:
pkg = app.LoadPackage(pkgLocation, eventListener)
' Set the file path variable in the package
' NB: You may need to prefix "User::" to the variable name depending on the execution method
pkg.Variables("filePath").Value = databasePath
pkgResults = pkg.Execute(Nothing, Nothing, eventListener, Nothing, Nothing)
- パッケージ内の変数にアクセスできるようになりました。
Access dbのインポートに使用している接続に応じて、いくつかの異なる作業が必要になる場合があります。 OLEDB接続を使用している場合、接続文字列とServerNameプロパティがあります。ファイルパス( @ [User :: filePath]
)を持つ変数を使用するようにServerNameプロパティを設定し、filePath変数(" Data Source =" + @ [User :: filePath] +&quot ;; Provider = Microsoft.Jet.OLEDB.4.0;"
)
このテキストファイルをご覧ください式を使用して接続文字列を動的に設定する方法の例。 これはAccess向けですが、データベースからの接続文字列では複雑です。
他のヒント
プログラムからSSISパッケージを呼び出さないので、そのように構成する方法がわかりません。 OLEDB接続マネージャーを使用して"ネイティブOLE DB Jet 4.0プロバイダー"を使用すると、接続マネージャーのServerNameプロパティを.MDBファイルへのパスに設定できることがわかります。
ファイルをimporting.mdbに移動することでこれにアプローチします。接続マネージャーは静的です。