0

我有一个集成服务包(VS 2012),它从 Excel 工作簿加载值并将它们存储在 SQL Server 中。我正在使用第 3 方库在 C# 脚本任务中提取工作簿数据,但在此之前,在任务中,我创建了一个 Filestream:

MessageBox.Show("Step 1");
using (FileStream fsWorkbook = new FileStream(strWkbkFilePath, FileMode.Open,
       FileAccess.Read, FileShare.ReadWrite))
{
    MessageBox.Show("Step 2");
    //...
}

FileStream 构造崩溃并出现错误“进程无法访问文件......因为它正被另一个进程使用。” 我知道这是发生崩溃的地方,因为我看到了“步骤 1”消息框,但没有看到“步骤 2”。

令人沮丧的是,如果我在脚本任务中设置断点,在导致错误的行之前开始单步执行代码,我可以继续并访问工作簿文件而不会出错。起初我认为这可能是由于竞态条件造成的,但后来我添加了上面显示的消息框,它也会在创建文件流之前暂停执行。MessageBox 导致的暂停并不能防止在非调试模式下运行时出现错误。

我已经尝试使用System.IO.File.Open和 FileStream 构造函数,两者都带有FileShare.ReadWrite,按照这个 SO thread,那么为什么我会收到共享错误?为什么调试时不会发生?

4

1 回答 1

0

好的,这原来是由于在包中的前一个脚本任务中打开了工作簿的 OleDbConnection。

我觉得奇怪的是,SSIS 脚本调试器设法在随后的包中打开尝试的 FileStream 之前解决了这个问题。

请注意,如果您在 SSIS 中调试文件权限问题时遇到异常情况。

于 2015-04-27T21:03:22.363 回答