2009-05-07 6 views
1

現在、バックエンドで.mdb(Access)データベースファイルを使用するVB.NETデスクトップアプリケーションを作成しています。 .mdbファイルは、VB.NETアプリケーションで開いて編集できます。編集が完了したら、ユーザーはデータをSQL Serverデータベースにインポートする必要があります。これは、動的ファイルパスシナリオを導入するまで、簡単な作業です。.NETアプリケーションからパッケージを実行するときにSSISパッケージの動的.mdb接続を設定する方法

私はSSISでかなりの経験を積んでいますが、これに近づくことでいくつか問題があります。ユーザーが選択した.mdbファイルを参照できるようにするWinFormを作成しました。 .mdbファイル名には、タイムスタンプ/日付情報が含まれています。 (私はアプリケーションのこの部分を開発していませんでした、私は最近、これに取り組んだので、問題が発生しました.mdbファイル名をタイムスタンプしませんでしたが、これはImが強制するものです!

とにかく、ファイル名とパスをSSISパッケージに動的に渡す必要があります。私はConnectionStringなどの変数を作成する場所を参照してください。しかし、私は実際にMS Access(Ole DB、ODBC、またはJet 4.0 for Office)で使用するデータ接続のタイプと詳細については不明です。 !)

パッケージは.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 
  1. は、どのように私は私のSSISパッケージに.mdbファイルの場所を渡すのですか? LoadPackageかもしれない?
  2. データ接続でSSISパッケージの動的ファイルの場所を使用するにはどうすればよいですか?

ダイナミックでない.mdbファイルをアップロードするのは簡単です。ソースと目的地を設定することは、ユーザー選択のダイナミックな側面を導入するまで非常に簡単です。これはSSISではどのように可能ですか?

何か助けていただければ幸いです。 ありがとうございます。

+0

私はVBアプリケーションからパッケージレベルの変数を設定する方法を考え出しました。 これは次のようなものです: pkg.Variables( "databasePath")。値=データベースパス – D3vtr0n

答えて

3

これは、使用する接続と実行方法によっていくつか変更されますが、基本的にパッケージに変数を取得するのと同じです。私は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) 
  • あなたは今、パッケージ内の変数にアクセスできる必要があります。

アクセスデータベースをインポートするために使用している接続によっては、いくつかの処理が必要な場合があります。 OLEDB接続を使用している場合は、接続文字列とServerNameプロパティがあります。

"Data Source=" + @[User::filePath] + ";Provider=Microsoft.Jet.OLEDB.4.0;")もfilePathに変数を使用するようにファイルパスを持つ変数( @[User::filePath])と接続文字列を使用するようにServerNameプロパティを設定し、動的に接続文字列を設定するために式を使用する方法については this text file exampleをチェックしてください。 This one is for Accessですが、データベースの接続文字列は複雑です。

+0

最後のAccessの例は非常に役に立ちます。私は今ソリューションを作成していますが、動的に動作していますが、データ型にエラーが発生しています。どうやらSQLデータ型はAccessデータ型が嫌いで、SSISではこれを自分でコード化してみましょう!私はこれが起こることを知っていましたが、データ型をソートしたら、最終的な解決策を投稿します。みんなに感謝しています。大いに感謝しています... – D3vtr0n

0

私はプログラムからSSISパッケージを呼び出さないので、そのように構成する方法はわかりません。 OLEDB接続マネージャを使用し、 "ネイティブOLE DB Jet 4.0プロバイダ"を使用すると、接続マネージャのServerNameプロパティを.MDBファイルへのパスに設定できることがわかります。

+0

ありがとうございます。私はそれをどうやって行うのかをプログラムで判断する必要があります。 SSISのダイナミック.mdbファイルに関しては、MSDNやGoogleから多くの助けがありません。これがExcelまたはCSVの場合は、非常に簡単ですが、SSISのAccessのこのデータアクセス接続オブジェクト全体は面倒です。ご協力ありがとうございました! – D3vtr0n

0

私はファイルをimporting.mdbに移動することでこれにアプローチします。接続マネージャは静的です。

関連する問題