因此,我正在运行 SSIS(通过 VS),当我的客户没有每天发送准确的文件时,我有两个部分挂断了我。我有一个删除旧文件的任务,然后将当前文件重命名为以 _OLD 结尾的文件名。
问题是:如果其中的文件不完全相同,它就会崩溃,导致整个过程失败。
一个例子: 客户在星期一发送文件:姓名、地址、年级、学校 同一个客户,在星期二发送:姓名、地址、学校
由于成绩文件不存在,它仍被重命名为 Grades_OLD,但 SSIS 失败。
脚本是:
del Names_OLD.csv
bye
这将转到重命名脚本:
ren Names.csv Names_OLD.csv
bye
然后将继续地址,做同样的事情。令人非常沮丧的是,当第二天单个文件不存在时,这些失败,而且似乎没有必要。
我们有两个脚本可以生成要处理的存档数据:
public void Main()
{
Dts.Variables["ARCHIVEFILE"].Value = Path.GetFileNameWithoutExtension(Dts.Variables["FTPFILE"].Value.ToString()) + "_OLD" + Path.GetExtension(Dts.Variables["FTPFILE"].Value.ToString());
Dts.TaskResult = (int)ScriptResults.Success;
}
和
public void Main()
{
/*PSFTP_DEL_script.txt
del %1
bye
PSFTP_REN_script.txt
ren %1 %2
bye
*/
var lineOut = String.Empty;
var File1 = Dts.Variables["User::FTPWORKINGDIR"].Value.ToString() + "\\SSIS_PSFTP_DEL_script.txt";
var File2 = Dts.Variables["User::FTPWORKINGDIR"].Value.ToString() + "\\SSIS_PSFTP_REN_script.txt";
lineOut = "del " + Dts.Variables["User::ARCHIVEFILE"].Value.ToString() + Environment.NewLine + "bye";
System.IO.File.WriteAllText(File1, lineOut);
lineOut = "ren " + Dts.Variables["User::FTPFILE"].Value.ToString() + " " + Dts.Variables["User::ARCHIVEFILE"].Value.ToString() + Environment.NewLine + "bye";
System.IO.File.WriteAllText(File2, lineOut);
Dts.TaskResult = (int)ScriptResults.Success;
}
研究它并没有真正提供任何帮助,只是让我回到我现在所在的地方。
最佳答案
尝试对每个可以处理的文件使用 foreach 循环,并将文件的所有处理都放在其中。并且不要在 foreach 循环之间放置任何优先级约束。
这将处理存在的文件,当其他文件不存在时不会失败。
foreach 循环本质上是检查文件是否存在。
这假定您不需要所有文件来正确处理它们。
关于c# - 如果文件不存在,试图让我的 SSIS 继续运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55959164/