1

処理中のファイル名を変数に保存したいのですが? その後、この変数 (ファイル名) を使用して、これらのファイルを処理済みフォルダーに移動します。データフロー タスクが各ファイルを処理する foreach ループを使用し、in ループを使用してスクリプト タスクのオブジェクトにファイル名を格納しています。

string filename = Dts.Variables["User::FILE_NAME"].Value.ToString();
object proccessed_file_name;
proccessed_file_name += filename;
Dts.Variables["User::FILE_NAME"].Value = proccessed_file_name;

文字列値をオブジェクトに保存し、後でパッケージで使用するのを手伝ってください。

4

1 に答える 1

0

スクリプト タスクがなくても、1 つの変数だけで実行できますUser::FILE_NAME

foreach loopディレクトリでを使用し、FILE_NAMEそのタスクから を入力します。データ フロー変換を介してファイルを処理します。次に、ファイルを移動します。次に、foreach loop続行します。ファイルを段階的に移動することで、何が成功し、何が失敗したかを正確に知ることができ、正しく処理されたファイルをロールバックして最初からやり直すことなく、プロセスを再開できます。

すべてを移動するのを待ちたい場合は、2 段階の移動を行うことができます。1 は上記と同じロジックで、元のディレクトリにある .processed または何かに名前を変更するだけです。次に、そのループが終了した後、foreach処理されたファイルに別のフィルタリングを追加し、同じFILE_NAME変数を使用してファイルを移動します。

script taskどちらの状況でも必要はありません。

本当に使いたいならscript task. のscript task後に を入れてDFTくださいforeach loop。または何かobjectを保持するタイプの別の変数を用意します。datatableそれにDataTableファイル名などを入力します。その後、テーブルをロードして処理するファイル名を取得するforeach必要があります。another script task正直なところ、最後のステップではsystem.io、スクリプト内でファイルを使用して移動するのが最も簡単です。

次のような変数をどのように使用しますdatatableか (これは自由に書いているので、追加の手順とエラー チェックが必要になる可能性があります)。

ファイル名をDataTableに入力するには、File_Name変数を読み取りDataTableVariableName可能にし、スクリプト タスクに対して読み取り/書き込み可能にしてから、次のように開始します。

実際には、この行の前にユーザーの null をテストする必要があるかもしれvariable.valueません。私は肯定的ではありません。

system.data.datatable dt = (system.data.datatable)Dts.Variables["User::DataTableVariableName"].Value;

if (dt == null)
{
   Write code to create your datatable
}
Add new DataRow to table -- lots of results on web about this and creating datatable.

これで、datatable. foreach loopを追加した後script task、処理されたファイルを移動します。

再び、変数からテーブルを取得することから始めます

system.data.datatable dt = (system.data.datatable)Dts.Variables["User::DataTableVariableName"].Value;

次にループしてdatatable、ここにもファイルを移動することをお勧めします。

foreach (dt datarow in dt.rows)
{
  typically I like to suggest copying and then deleting the source file depending on how you over write. so you would do something like.
If (system.io.file.Exists(dr.["FileNameRowLable"].ToString())
{
   system.io.file.copy(source, destination);
   if (file.exists(destination))
   {
      file.delete(source);
   }
}
}

f でファイルを移動することに固執する方が幸せになると思いますoreach loopので、スクリプトタスクは必要ありません。

于 2016-06-19T16:16:57.947 に答える