2012-01-20 16 views
0
私は次のエラーを取得していますSSIS(SQL Server 2005の)仕事で問題を見ている

は有効ではありません:SSIS接続エラー - ファイル名は

The file name "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\UNC\FOLDERS\filename.xls;Extended Properties="EXCEL 8.0;HDR=YES";" specified in the connection was not valid.

は は、このサイトや他の人の周りに私の検索が示し

これの最も一般的な原因はパーミッションエラーですが、この実装では任意の数のファイルが正常に処理されているため、この状況ではそうは思われません。 Windowsサービスが拾って日常的に私たちに

ベンダーFTPファイルは、一時ディレクトリにコピーして、それらのファイルにSSISのジョブを呼び出します。

は、ここでセットアップの概要です。各ベンダーには、スナップショットデータフィード用とトランザクション一覧用の2つのSSISジョブがあります。

現在、プロセス全体で50以上の異なるSSISジョブが存在します。それらはすべて、スクリプトタスクステップで上記のエラーで失敗する1つの特定のトランザクションジョブを除いて機能します。少なくとも毎日ユニークなファイル名でファイルが取得されるため、ジョブを取得し、ソースディレクトリに基づいてベンダーを決定し、ファイル名のインジケータに基づいてファイルタイプを決定し、どのSSISジョブを呼び出すかを決定します。ファイル名が毎日変わるので、サービスがSSISジョブを呼び出すときに、ベンダーのファイル名を含む一連のパラメータを渡して、ファイルに正しく接続できるようにします。

各ジョブは、残りのジョブに必要な変数値を設定するスクリプトタスクで始まります。たとえば、実行ごとにベンダーのファイル名が変更されるため、SSIS変数コレクションを使用してベンダーのファイル名を渡し、そのファイル名を文字列のDataSourceとして使用するデータソースの接続文字列を設定します。上記のエラーが発生するのはスクリプトタスクの時点です。ここでエラーが発生したタスクのスクリプトコードがあります:

Dts.Connections("Transactions File").ConnectionString = _ 
    Dts.Variables("ConnectionString").Value.ToString().Replace("##FILE_PATH##", sourceFilePath) 

のConnectionString値である:プロバイダ= Microsoft.Jet.OLEDB.4.0;データソース= ## FILE_PATH ##;プロパティ= "EXCEL 8.0拡張; HDR =はい"; sourceFilePathは、私は(処理のために同じ保持ディレクトリを使用して)このプロセスを通過する他のすべてのファイルが作業しているので、それが権限エラーだとは思わない処理ディレクトリ

におけるベンダーファイルへの完全なUNCパスです。それは、他のすべてのファイルと同じプロセスをたどり、適切なディレクトリにファイルが正しく存在することを確認してから、存在しないファイルの問題であってはなりません。私はまた、接続文字列が長すぎるかもしれないと考えていますが、ファイルパスは109文字で終了し、さらに短いパス(< 90)でも同じエラーが発生します。

私に見てもらえると思いますか?助けてくれてありがとう。

+0

あなたは、ConnectionStringプロパティを変更するスクリプトを使用しただけではなく、その上に表現を使用している特別な理由はありますか?私はそれがあなたの問題だとは思わないが、道路の保守に苦労することはありませんか?私は提供された偽のパス\ UNC \ FOLDERSは実際には\\ UNC \ FOLDERSとして表現されていると信じています – billinkc

+0

最初の質問に答えて、SSISをその場で学びました。あなたの2番目の答えには、はい、私はこの投稿を作成していたときにタイプミスでした。ありがとう。 –

+0

私の答えを試してみましたか?それでも問題はありますか? – billinkc

答えて

0

提示された情報に基づいて、すべて正しいことを行っています。 SSISを初めてお使いになる方には、アドビのアドインBIDSHelperのコピーを入手することをお勧めします。これには、構成や表現に関して特に時間を節約できる素晴らしい機能があります。

Excel接続マネージャーがC:\ssisdata\so_paulsmithjr.xlsを指し、すべてが配線された参照パッケージを作成しました。この時点で

Control flow

、私はパッケージの動きをする時間だったものが働いている知っています。私は

    • 次の変数とその値を作成しCurrentFile - C:\ ssisdata \ so_paulsmithjr.xls
    • プレースホルダ - ## FILE_PATH ##
    • TemplateConnection - Provider=Microsoft.Jet.OLEDB.4.0;Data Source=##FILE_PATH##;Extended Properties="Excel 8.0;HDR=YES";

    第四変数であります式を設定する(変数を右クリックすると、プロパティウィンドウが表示されます。式をTrueに設定します。&式)

    • CurrentConnection - REPLACE(@[User::TemplateConnection], @[User::PlaceHolder], @[User::CurrentFile])

    私は(Excelの接続マネージャの接続文字列の元の値である)ReferenceConnectionにCurrentConnection値を比較して、物事が一致しました。この時点で、CurrentFileの値をC:\ ssisdata \ so_paulsmithjr - Copy.xlsに変更すると、自動的にCurrentConnectionの値に反映されます。

    最終的なトリックは、Excel接続マネージャで式を使用することです。ここでも、CMを右クリックし、[プロパティ]の下に式が表示されます。その下に何もないので、それは拡大しません。代わりに、楕円をクリックし、次にConnectionStringプロパティを選択し、楕円をもう一度選択し、今度は@[User::CurrentFile]変数をドラッグします。 OK x2をクリックすると、CurrentConnection変数で指定されている場所に接続マネージャが設定されます。

    これはうまく機能しますか?

    enter image description here

  • +0

    私はこれを受け入れたとマークしました。式を使用するように接続オブジェクトを変更すると、問題が修正されました。私はまだコードがなぜスクリプトの仕事の一部としてそれをやっている間、どこで動作しないのかまだ分かりません。 –