繁体   English   中英

如何通过SSIS脚本任务打开OLEDBConnection?

[英]How to open an OLEDBConnection through SSIS script task?

我需要处理保存在特定文件夹中的Excel文件。

在我的SSIS程序包中,我添加了一个配置为文件枚举器的Foreach循环,以填充文件filepath变量。 然后,脚本任务使用此变量打开并处理Excel文件。

在此处输入图片说明

但是,我无法在脚本任务中打开OLEDB连接到我的文件。 文件filepath包含有效路径。 我在脚本中添加了一个测试来检查文件。

这是我的代码示例:

// Check file to process.
string rawfilePath = Dts.Variables["User::FilePath"].Value.ToString().Replace(@"\",@"\\");

if (rawfilePath == String.Empty || !File.Exists(rawfilePath))
            Dts.Events.FireError(0, SCRIPT_TASK_NAME, "Invalid input file '" + rawfilePath + "'...", String.Empty, 0);

MessageBox.Show(rawfilePath);

// Open connection.
string rawFileConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='"
 + rawfilePath + "';Extended Properties='Excel 12.0;HDR=NO;IMEX=1'";

MessageBox.Show(rawFileConnectionString);

OleDbConnection rawExcelConnection = new OleDbConnection(rawFileConnectionString);
rawExcelConnection.Open();

我的文件夹是C:\\TestFolder 它包含两个文件: C:\\TestFolder\\export_20140101.xlsC:\\TestFolder\\export_20140102.xls

这是错误:

在此处输入图片说明

用英语

调用的目标已引发异常

无需像使用检查文件一样将“ \\”替换为“ \\\\”。

当您转换DTS变量时,编译器会识别出这一点。

编译器将您的路径识别为C:\\\\ TestFolder \\\\ export_20140102.xls

发生这种情况时,它将看到两个空目录,并且无法返回值。

编译器读取DTS变量时,会将其作为文字字符串读取。

如果您更改,它应该可以工作

string rawfilePath = Dts.Variables["User::FilePath"].Value.ToString().Replace(@"\",@"\\");

string rawfilePath = Dts.Variables["User::FilePath"].Value.ToString());

最后,我的脚本有效。

我的本地计算机上未安装数据库引擎ACE 12.0。 我从Microsoft 网站下载了.exe软件包,然后将软件包的执行模式从64位更改为32位,因为安装的Microsoft Office版本是32位版本(在项目设置中为Run64BitRuntime变为FALSE )。

这是有关如何在64位环境中运行32位程序包的文章

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM