【发布时间】:2016-07-21 15:15:54
【问题描述】:
在我当前的项目中,我必须获取一个已知目录但名称未知的 excel 文件,将其放入数据库表中,然后移动并重命名使用的 excel 文件。
由于这是我的第一个项目,我已经使用了一些教程和 stackoverflow 页面,因此为什么控制流都在 for each 循环中(即使它可能不需要),但这里是控制流:
http://i.stack.imgur.com/Nepgg.png
这是我查找 excel 文件并分配变量的脚本任务:
public void Main()
{
string directoryLocation = @"I:\All\L3VA Import\"; //Change this for new directory
int directoryLength = directoryLocation.Length;
string[] filePath = Directory.GetFiles(directoryLocation, "*.xls*");
int filePathLength = filePath[0].Length;
Dts.Variables["myConnectionString"].Value = filePath[0];
Dts.Variables["myFileName"].Value = filePath[0].Substring(directoryLength, filePathLength - directoryLength);
然后我使用数据流任务将电子表格数据泵入 OLE DB,它本身不起作用,但如果首先执行脚本任务,它就会起作用,这让我相信它正确地分配了我的变量。
当我尝试使用文件系统任务移动和重命名此文件时,我的问题出现了,这似乎找不到这些变量的值并遇到错误:
错误:文件系统任务中的 0xC002F304,文件系统任务:发生错误,并显示以下错误消息:“找不到路径的一部分。”。
任务失败:文件系统任务
这里是使用的变量列表和文件系统任务: http://i.stack.imgur.com/p6FWD.png
【问题讨论】:
-
抱歉,为什么活动是并行的而不是顺序的?您不应该先运行导入然后移动文件吗?尝试使用整个路径设置变量 myConnectionString 而不仅仅是文件系统任务中的文件名;文件系统任务中的源变量和目标变量应该包含路径+文件名
-
如果看代码 string[] filePath = Directory.GetFiles(directoryLocation, ".xls"); Dts.Variables["myConnectionString"].Value = filePath[0]; myConnectionString 是整个文件路径。我添加了一个额外的绿色箭头,希望它将 myConnectionString 的值保留到文件系统任务中,这似乎没有发生
-
...一切正常,最好检查目标变量,路径是否正确等等...
-
对不起,如果我问,我们必须验证所有情况...查看变量,文件夹 QELIZ 已经存在?
-
今天刚回来检查它,我发现 System::UserName 变量有 QELIZ\\ 部分,这也导致了混乱!感谢您的帮助,当我使用“Watch”调试窗口时意识到。现在一切正常。
标签: c# excel file ssis ssis-2012