无法使用ssis包导入excel到sql server

时间:2013-04-07 11:23:19

标签: excel ssis sql-server-2008-r2

我正在开发一个ssis包,它将excel文件(.xlsx)从ftp服务器导入到本地文件夹,然后将它们导入到sql server表中。我正在使用foreach映射到文件名。从ftp服务器导入到本地工作正常,但是从本地文件夹导入到sql表失败。

似乎我在excel源码中遇到了问题。这些是错误:

Start SSIS package "Package.dtsx."
Information: 0x1 at Script Task, C # My Message: System.Collections.ArrayList
Information: 0x4004300A at Data Flow Task, SSIS.Pipeline: Validation phase begins.
Error: 0xC0202009 at Data Flow Task, Excel Source [1]: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80040E37.
Error: 0xC02020E8 to Flow Task data, Excel Source [1]: Failed to open a rowset for "Sheet1 $". Verify that the object exists in the database.
Error: 0xC004706B to Flow Task data SSIS.Pipeline: validation failed "component" Excel Source "(1)". Returned validation status "VS_ISBROKEN."
Error: 0xC004700C to Flow Task data SSIS.Pipeline: Failed to validate one or more components.
Error: 0xC0024107 at Data Flow Task: There were errors during task validation.
Warning: 0x80019002 at Foreach Loop Container: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED. The Execution method succeeded, but the number of errors (6) reached the maximum allowed (1); leading to a failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the value of MaximumErrorCount or fix the errors.
SSIS package "Package.dtsx" finished: Success.
The program '[5504] Package.dtsx: DTS' has exited with code 0 (0x0).

作为配置,我有:

对于excel管理器连接,我为connectionString = @[User::variable1] + @[User::DOWNLOAD_DIRECTORY_LOCAL] + @[User::FTP_FILE_URL] + @[User::variable2]

创建了一个表达式

variable 1 =Provider=Microsoft.ACE.OLEDB.12.0;Data Source=

variable 2 = ;Extended Properties="EXCEL 12.0;HDR=YES";

我还将延迟验证属性设置为true,用于数据流任务,ftp任务,foreach任务和excel连接。

2 个答案:

答案 0 :(得分:1)

我刚写了一个包,自己做同样的事情。要按此顺序检查的事项:

    您在Excel数据连接中的
  1. 是否浏览过本地文件夹中的excel文件(一旦它们在那里)并选择了一个(在开发时需要在那里复制一个)?所以当你转到数据流任务中的excel源对象时(在For Each中)你可以选择Excel数据连接,然后在“excel表的名称”下看到Sheet $ 1?

  2. 如果您确定已完成上述操作,则右键单击Excel数据连接,并在Expressions属性中添加ExcelFilePath = @ [User :: FTP_FILE_URL]? (请注意,您需要在For Each容器的Collection选项卡上的Retrieve File Name下选择'Fully Qualified')

  3. 您在Excel数据连接中的
  4. 是否为.xlsx文件或Excel 2003 for .xls选择了正确的版本(Excel 2007)?我注意到一个小错误,当我更改文件名时它默认返回到2007年,我不得不手动将其更改回(再次)到2003年。

  5. 在步骤运行之前,检查文件夹中是否存在至少一个工作簿。这里有一些关于如何添加脚本任务以验证User :: DOWNLOAD_DIRECTORY_LOCAL中至少有一个文件的代码。

  6. 我收到了一些关于Microsoft.ACE.OLEDB.12.0驱动程序的错误,加上64位服务器的问题,并且必须将程序包包装在一个作业中并检查'使用32位作业属性中执行选项下的运行时'选项。检查驱动程序是否正常工作(如果没有正确设置,通常会出现特定的驱动程序错误)。

  7. 是的,在我回家之前很快就发现了。让我知道它是否有效或仍然是失败..

答案 1 :(得分:1)

在遇到这个问题时你应该问自己的问题是:
我在哪里运行我的dstx文件?
它来自Microsoft Visual Studio吗? 它来自SQL代理吗? 它来自Integration Services Package Execution Utiliy吗? 然后优化您的问题以在论坛上找到答案。