Crystal Report数据库连接失败

时间:2018-05-30 11:57:16

标签: c# winforms visual-studio crystal-reports

我实现了一个Windows窗体,单击一个按钮就可以打印一个带有CrystalReportViewer的报表。 我在Visual Studio 2017中开发它,在我的机器上安装了CR运行时32和64位。

这是我的代码:

using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.ReportSource;
using CrystalDecisions.Shared;

..............
..............
        ConnectionInfo crconnectioninfo = new ConnectionInfo();
        ReportDocument cryrpt = new ReportDocument();
        TableLogOnInfos crtablelogoninfos = new TableLogOnInfos();
        TableLogOnInfo crtablelogoninfo = new TableLogOnInfo();

        string path = "my//report//path.rpt";
        cryrpt.Load(path);

        Tables CrTables;

        crconnectioninfo.ServerName = "MyServerName";
        crconnectioninfo.DatabaseName = "MyDatabaseName";
        crconnectioninfo.UserID = "MyUserName";
        crconnectioninfo.Password = "MyPassword";

        CrTables = cryrpt.Database.Tables;
        foreach (Table crtable in CrTables)
        {
            crtablelogoninfo = crtable.LogOnInfo;
            crtablelogoninfo.ConnectionInfo = crconnectioninfo;
            crtable.ApplyLogOnInfo(crtablelogoninfo);
        }

        crystalReportViewer1.ReportSource = cryrpt;

它可以在我的机器和其他一些机器上正常工作。

当我在发布模式下构建它,并将应用程序安装到另一台机器上时,有人工作,而其他人没有。错误是报表无法连接到数据库。

我试图ping服务器,没关系。

以下是异常的堆栈跟踪:

Stack Trace:   in CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass.GetLastPageNumber(RequestContext pRequestContext)
  in CrystalDecisions.ReportSource.EromReportSourceBase.GetLastPageNumber(ReportPageRequestContext reqContext)

Inner Source: rptcontrollers.dll

HResult: 2147217393

在所有机器上都安装了CRRuntime(和我一样!)。 也许我想念一些依赖,但不知道。

我注意到它在没有安装Visual Studio的计算机上不起作用。但我无法在所有PC上安装Visual Studio。

我无法在网上找到类似的问题。 任何帮助将不胜感激。

提前致谢。

2 个答案:

答案 0 :(得分:0)

Crystal Report使用sql连接sdk连接到数据库。

这些是要安装以使连接正常工作的功能:

客户端工具连接

客户端工具向后兼容性

客户端工具SDK

管理工具 - 基本

管理工具 - 完成

SQL客户端连接SDK

下载页面here

希望这有帮助!

答案 1 :(得分:0)

与工作计算机相比,检查非工作计算机是否缺少任何Microsoft Visual C ++ Redistributables。我附上了运行使用Crystal Viewer的示例应用程序的Procmon跟踪的屏幕截图。跟踪显示调用C ++可再发行组件。如果不是这样,请尝试运行Procmon以查看是否缺少任何依赖项。

Procmon trace showing C++ redistributables are called