1

环境描述

我有一个从 asp.net 执行的 SSIS 任务,该包通过 UNC 路径从 excel 文件中获取数据,并将数据放入 sql server 数据库中。我已将 SSIS 部署到文件系统,它具有 Windows 身份验证数据库连接,并且 IIS 用户具有数据库访问权限。我可以作为用于托管 Web 应用程序的 AppPoolUser 登录并打开/修改有问题的文件,以便获得这些基本权限。Web App 是在 x86 中编译的。

当它工作时:

  • 在我的用户或 appPool 用户下的服务器上的浏览器中从 Web 应用程序运行时
  • 在通过 BIDS 运行的服务器上以我的身份登录时
  • 在通过 BIDS 运行的服务器上以 AppPoolUser 身份登录时
  • 使用 AppPoolUser 从服务器上的计划任务运行时

当它不起作用时:

  • 从客户端浏览器运行时,即不是具有 IIS 托管 asp.net 应用程序的机器

我的问题

客户端和服务器有什么不同,我该如何让它工作?我的印象是,在运行 Web 应用程序时,所有连接都通过 AppPool 用户,所以它应该在包含的任何机器服务器上表现相同?

返回客户端浏览器的错误

SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80004005。OLE DB 记录可用。来源:“Microsoft Office Access 数据库引擎”Hresult:0x80004005 描述:“Microsoft Office Access 数据库引擎无法打开或写入文件 '\\myserver\My folder\myfile.xlsx'。它已被其他用户以独占方式打开,或者您需要获得查看和写入其数据的权限。”。SSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。对连接管理器“MyExcelFileConnection”的 AcquireConnection 方法调用失败,错误代码为 0xC0202009。在此之前可能会发布错误消息,其中包含有关 AcquireConnection 方法调用失败原因的更多信息。组件“Excel Source”(1) 验证失败并返回错误代码 0xC020801C。一个或多个组件验证失败。任务验证期间出现错误。

c#代码运行SSIS包

        string pkgLocation;
        Package pkg;
        Application app;
        DTSExecResult pkgResults;
        string result = string.Empty;
        string dtsErrors = string.Empty;

        try
        {
            pkgLocation = packagePath;
            app = new Application();
            pkg = app.LoadPackage(pkgLocation, null);
            pkgResults = pkg.Execute();

            foreach (DtsError local_DtsError in pkg.Errors)
                dtsErrors += " " + local_DtsError.Description;

            result = pkgResults.ToString();
        }
        catch (Exception exception)
        {
            result = exception.Message;
        }
4

0 回答 0