おそらく私は何かが欠けているかもしれませんが、これは私にとってはうまくいきます。ColumnNamesInFirstDataRow で読み取り専用の問題が発生していません
という名前のパッケージ レベル変数を作成し、AddHeader
ブール値を入力して、に設定しましたTrue
。FFCM という名前のフラット ファイル接続マネージャーを追加し、HeadCount (int)、AddHeader (boolean) の 2 列の CSV 出力を使用するように構成しました。接続マネージャーのプロパティで、プロパティ「ColumnNamesInFirstDataRow」の式を追加し、値を割り当てました。@[User::AddHeader]
ファイルのサイズをテストするスクリプト タスクを追加しました。変数 AddHeader への読み取り/書き込みアクセスがあります。次に、このスクリプトを使用して、ファイルが空かどうかを判断しました。「空」の定義がヘッダー行があるということである場合、その長さに一致するように if チェックのロジックを調整します。
public void Main()
{
string path = Dts.Connections["FFCM"].ConnectionString;
System.IO.FileInfo stats = null;
try
{
stats = new System.IO.FileInfo(path);
// checking length isn't bulletproof based on how the disk is configured
// but should be good enough
// http://stackoverflow.com/questions/3750590/get-size-of-file-on-disk
if (stats != null && stats.Length != 0)
{
this.Dts.Variables["AddHeader"].Value = false;
}
}
catch
{
// no harm, no foul
}
Dts.TaskResult = (int)ScriptResults.Success;
}
追加シナリオを確実に生成するために、2 回ループしました。
ファイルを削除してパッケージを実行しましたが、ヘッダーは 1 回しかありませんでした。