代码之家  ›  专栏  ›  技术社区  ›  DeveloperChris

将Crystal Reports从VB6独立应用程序转换为.NET Web应用程序时出现问题

  •  0
  • DeveloperChris  · 技术社区  · 15 年前

    我被要求将包含一些Crystal Reports的旧版应用程序从VB6 Standalone转换为.NET C基于Web的应用程序

    这是我的第一个.NET C Web应用程序,所以我一边学习一边去。

    我尝试获取Crystal Reports.net(包括未经许可的版本)失败。

    我很高兴地发现,我可以简单地将.rpt文件复制到Visual Studio 2008中,它们起作用了…井几乎

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

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

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

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

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

    所以我想知道是否有我需要知道的问题?

    我注定要失败吗?

    如果需要,是否有一种简单的方法可以转换为Microsoft ReportViewer?

    DC(又名迷茫和困惑)

    已解决:以“未配置报告源”失败

    问题是一个引用没有加载或加载不正确。我重新添加了Crystal Reports引用,一旦重新启动,它立即崩溃了VS2008。我再次加载了它们,错误消失了。

    直流

    1 回复  |  直到 15 年前
        1
  •  0
  •   Community Nick Dandoulakis    7 年前

    问题解决了。不是理想的,但无论如何都能解决。

    我把这个放在这里是为了让别人从我的斗争中学习。

    Crystal Reports(V9包含在VS2008中)不会使用SQL(或任何其他连接),它必须使用数据集或ODBC连接。因为我对数据集不太了解,所以我没有走这条路。

    Crystal Reports似乎是为使用设计器而设计的,您不能动态地创建它。这反映在改变连接有多困难。一切都失败了直到我找到这个 How do I change a Crystal Report's ODBC database connection at runtime? Patm的解决方案就是提供线索的那个。

    这是我在页面加载方法中实现的解决方案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版本,尽管没有人声明。

    直流