【问题标题】:How to open an OLEDBConnection through SSIS script task?如何通过 SSIS 脚本任务打开 OLEDBConnection?
【发布时间】:2015-01-12 03:17:28
【问题描述】:

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

在我的 SSIS 包中,我添加了一个配置为文件枚举器的 Foreach 循环,填充了一个 filepathvariable。然后,脚本任务使用此变量打开 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

这是错误:

英文

调用目标抛出异常

【问题讨论】:

  • 你的消息框会触发吗?哪一行失败了,rawExcelConnection 的实例化还是 Open 调用?
  • 在调试模式下运行或将整个代码放入 try catch 块中,并在 catch 块中使用带有异常消息的 Dts.FireError
  • try/catch 块救了我的命!。该错误与数据库引擎(ACE 12.0)有关。驱动没找到,之前没安装过。

标签: c# sql-server ssis oledb oledbconnection


【解决方案1】:

无需像处理检查文件那样将“\”替换为“\\”。

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

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

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

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

如果你改变它应该可以工作

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

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

【讨论】:

  • 事实上,两种解决方案都有效。问题不在于 URL 格式。
【解决方案2】:

最后,我的脚本工作了。

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

这是一篇关于how to run a 32 bit package in a 64 bit environnent的帖子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多