【问题标题】:Problems converting crystal reports from vb6 standalone app to .net web app将水晶报表从 vb6 独立应用程序转换为 .net Web 应用程序时出现问题
【发布时间】:2010-01-21 02:39:39
【问题描述】:

我被要求将包含一些水晶报告的旧版应用程序从独立 vb6 转换为基于 .net c# web 的应用程序

这是我的第一个 .net c# web 应用程序,所以我边走边学

我尝试获取水晶报告 .net(包含的版本未获得许可)失败了。

我惊喜地发现,我可以简单地将 .rpt 文件复制到 Visual Studio 2008 中,并且它们可以正常工作......几乎是

在 ide 中打开 .rpt 文件可以正常工作,我可以正确查看报告及其填充

另一方面,如果我尝试从 Crystalreportsource(在 aspx 页面上)中的智能标记编辑报告,即使它是“报告源未配置”,也会失败。

在运行时我收到错误“报告加载失败”

我还需要使用 web.config 中提供的连接字符串之一连接到 SQL 数据库,此连接字符串可以在运行时更改(到训练数据库)

我搜索并找到了几种更改连接字符串的技术,但任何在运行时更改连接属性的尝试都失败了。

所以我想知道是否有任何我需要了解的问题?

我注定要失败吗?

如有必要,是否有一种简单的方法可以转换为 Microsoft 的报告查看器?

DC(又名茫然和困惑)

已解决:失败并显示“未配置报告源”

问题似乎是引用未加载或加载不正确我重新添加了水晶报告引用,一旦重新启动,VS2008 立即崩溃我再次加载它们并且错误消失了。

直流

【问题讨论】:

    标签: .net crystal-reports


    【解决方案1】:

    好的,问题解决了。不理想,但可以通过任何方式解决。

    我把它放在这里是为了让其他人可以从我的努力中学习。

    Crystal 报告(v9 包含在 vs2008 中)不会使用 SQL(或任何其他连接),它必须使用数据集或 ODBC 连接。由于我对数据集了解不多,所以我没有走这条路。

    Crystal 报表似乎被设计为使用您无法动态创建它的设计器。这反映在改变连接的难度上。一切都失败了,直到我发现How do I change a Crystal Report's ODBC database connection at runtime? patm 的解决方案是提供线索的解决方案。

    这是我在 page_load 方法中实现的 c# 解决方案

            SqlConnectionStringBuilder SConn = new SqlConnectionStringBuilder(_connectionString);
    
            ReportDocument cryRpt = new ReportDocument();
            TableLogOnInfos crtableLogoninfos = new TableLogOnInfos();
            TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();
            ConnectionInfo crConnectionInfo = new ConnectionInfo();
            crConnectionInfo.ServerName = dsn;// SConn.DataSource;
            crConnectionInfo.DatabaseName = SConn.InitialCatalog;
            crConnectionInfo.UserID = SConn.UserID;
            crConnectionInfo.Password = SConn.Password;
    
            String rpt = Server.MapPath(@"~/reports2/Report1.rpt");
            cryRpt.Load(rpt);
            foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in cryRpt.Database.Tables)
            {
                crtableLogoninfo = CrTable.LogOnInfo;
                crtableLogoninfo.ConnectionInfo = crConnectionInfo;
                CrTable.ApplyLogOnInfo(crtableLogoninfo);
            }
    
            CrystalReportViewer1.ReportSource = cryRpt;
            CrystalReportViewer1.RefreshReport();
    

    dsn 是 ODBC 连接的名称,而不是您要连接的服务器,例如。不是“localhost/sqlexpress”

    我尝试了许多不同的方法来动态设置与数据库的连接,但只有上述方法有效。我的猜测是其他人需要完全许可的 Crystal Reports 版本,尽管没有人声明。

    直流

    【讨论】:

      猜你喜欢
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      • 2016-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-20
      • 1970-01-01
      相关资源
      最近更新 更多