我有一个SSIS 2012软件包,除其他外,需要在20个不同的Excel 2010文件中分别写入9个不同的标签。
在其中一个数据流任务中,在Visual Studio 2012中运行包时,验证期间出错:
错误:MyPackage上的0xC0014020,连接管理器“Excel Files Whatever”:发生了ODBC错误-1。 错误:MyPackage上的0xC0014009,连接管理器“Excel Files Whatever”:尝试与数据库服务器建立开放式数据库连接(ODBC)连接时出错。
生成此错误的数据流任务将写入每个Excel文件中的六个选项卡(如果有效)。在此SSIS包的先前版本中使用较少的文件(四个),它工作正常。此外,同一个包中写入每个Excel文件的其他三个选项卡的另一个数据流任务也可以正常工作。两个数据流任务使用相同的连接管理器。每次运行包时,错误中指定的特定连接管理器都会更改。
我启用了ODBC跟踪,我在日志中发现了以下错误:
DIAG [08004] [Microsoft] [ODBC Excel驱动程序]客户端任务太多。 (-1036)
我找到了一些documentation about ODBC destinations,其中有相关部分:
对于同一台或不同的表,在同一台机器上或在不同的机器上(并非正常的全局会话限制),可以并行运行的ODBC目标组件的数量没有限制。
但是,正在使用的ODBC提供程序的限制可能会限制通过提供程序的并发连接数。这些限制限制了ODBC目标可能支持的并行实例的数量。 SSIS开发人员必须了解所使用的任何ODBC提供程序的限制,并在构建SSIS包时将其考虑在内。
好的,很好,但是:
作为附加信息,我在所有ODBC连接管理器上将DelayValidation设置为True。我在所有ODBC目标上将ValidateExternalMetadata设置为False,因为启动程序包时文件尚不存在(“复制文件”任务会在程序包中较早创建所有文件)。每个连接管理器的连接字符串由表达式生成,但结果的格式为
Dsn=Excel Files;dbq=c:\MyWorkspace\Whatever-20130701-to-20130917.xlsx;defaultdir=c:\MyWorkspace;driverid=1046;fil=excel 12.0;maxbuffersize=2048;pagetimeout=5;
其中只有文件和目录名称因表达式中使用的参数而发生变化。