也许我错过了一些东西,但这对我有用。我没有 ColumnNamesInFirstDataRow 的只读问题
我创建了一个名为 的包级别变量AddHeader
,键入 Boolean 并将其设置为True
. 我添加了一个名为 FFCM 的平面文件连接管理器,并将其配置为使用 2 列 HeadCount (int)、AddHeader (boolean) 的 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;
}
我循环了两次以确保生成附加场景
我删除了我的文件并运行了包,但只有一次标题。