2

背景

我已经实现了一个从磁盘执行 SSIS 包的 asp.net Web 应用程序。这在调试中从 Visual Studio 运行时有效,但一旦发布到服务器,就会根据以下错误抱怨 64 位 SSIS。

我看过很多关于解决方案的帖子,但不确定最适合我的方案的解决方案。我对 Web 服务器和 asp.net c# 应用程序代码具有完全访问权限,在此版本中对数据库服务器的访问权限有限。

错误: *SSIS 错误代码 DTS_E_OLEDB_EXCEL_NOT_SUPPORTED:64 位版本的 SSIS 不支持 Excel 连接管理器,因为没有可用的 OLE DB 提供程序。SSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER*

C# 代码

        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();

            //Add any errors to string for notifying user
            foreach (DtsError local_DtsError in pkg.Errors)
                dtsErrors += " " + local_DtsError.Description;

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

潜在的解决方案(请帮助提出建议)

  • 将 SSIS 作为 32 位进程运行(我该怎么做,它会在我的情况下工作吗?)

  • 为 excel/access 安装 64 位驱动程序,并使用带有 openrowset 的 sql 存储过程来获取我的数据,而不是 SSIS。我不确定这个,我需要数据库服务器和Web服务器上的驱动程序吗?此外,我需要让数据库管理员打开他们可能无法接受的临时查询。这是我在本地工作的驱动程序,但它已经以原始方式在本地工作了.. http://blog.codefluententities.com/2011/01/20/microsoft-access-database-engine-2010-redistributable/

  • 我没有提到的任何其他修复,这些看起来像是粗略的黑客攻击..?

4

3 回答 3

3

这取决于 Excel 驱动程序,默认情况下 Excel 驱动程序是 32 位的。如果你在 64 位操作系统上尝试你的应用程序,那么它肯定会抛出一个错误。

要解决此问题,请转到Project properties > Debugging > Debug Option 并将Run64bitruntime设置为False在这里查看更多。

于 2013-02-13T08:39:16.427 回答
3

我的解决方案是以 32 位模式运行 iis 应用程序池。

请注意,当我在我的 asp.net 页面中进行此操作后,我意识到这只能在托管该站点的服务器上的浏览器中工作。这是我关于让它在任何客户端访问此服务器的浏览器上工作的帖子:来自 ASP.net 的 SSIS 包在客户端上不起作用,但在服务器上起作用

于 2013-02-17T22:29:15.167 回答
2

这取决于你如何执行你的包,但是有一个属性你可以设置预执行来强制 32 位运行时。在集成服务目录 (SSIS 2012) 中,它在执行时的高级选项卡下,其中有一个 32 位运行时复选框。

在此处输入图像描述

作为它的 Excel,您将不得不以 32 位运行,因为不支持 64 位 Excel 驱动程序。这可能会帮助您SSIS 32 和 64 位 - Todd McDermid

图片来源

于 2012-11-19T11:43:34.507 回答