在我当前的项目中,我必须获取已知目录但未知名称的excel文件,将其放入数据库表中,然后移动并重命名所使用的excel文件。
由于这是我的第一个项目,我已经使用了一些教程和stackoverflow页面,所以为什么控制流都在每个循环内部(即使可能不需要),但这里是控制流程:
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
答案 0 :(得分:0)
在我看来,如果存在多于1个文件,您将如何决定哪个Excel文件最合适?你需要循环遍历其中的多个吗?无论如何,如果您使用Foreach Loop Container
并将其设置为搜索目录,就像您的脚本一样,您将不需要脚本任务。所以你可以这样做:
Foreach Loop Container
和配置以搜索目录并将变量映射到您刚设置的内容data flow
data flow
上设置Excel Connection
静态expression
设置Connection Manager
File Path Variable
后,connection string
作为foreeach loop
< / LI>
请注意,因为您可能需要动态构建目标路径,您可能需要更多变量来更轻松地完成任务。
bool