【发布时间】:2010-03-25 17:27:43
【问题描述】:
我正在运行 CR XI,并通过我的 ASP.NET 页面中的 ReportViewer 访问 .RPT 文件。
我已经有了下面的代码,它应该是动态设置报表数据源的。
rptSP = New ReportDocument Dim rptPath As String = Request.QueryString("report") rptSP.Load(rptPath.ToString, 0) Dim SConn As New System.Data.SqlClient.SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings("MyConnectionString").ConnectionString) rptSP.DataSourceConnections(SConn.DataSource, SConn.InitialCatalog).SetConnection(SConn.DataSource, SConn.InitialCatalog, SConn.UserID, SConn.Password) Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo myConnectionInfo.ServerName = SConn.DataSource myConnectionInfo.DatabaseName = SConn.InitialCatalog myConnectionInfo.UserID = SConn.UserID myConnectionInfo.Password = SConn.Password
'Two new methods to loop through all objects and tables contained in the requested report and set
'login credentials for each object and table.
SetDBLogonForReport(myConnectionInfo, rptSP)
SetDBLogonForSubreports(myConnectionInfo, rptSP)
Me.CrystalReportViewer1.ReportSource = rptSP
但是当我进入每个 .RPT 文件并打开 Database Expert 部分时,显然那里仍然存在硬编码的服务器名称,并且上面列出的代码似乎无法更改那里硬编码的服务器名称.
我这样说是因为我有培训和生产环境。当 .RPT 文件使用我的生产服务器进行硬编码时,我使用上面的代码在我的训练服务器上打开它(并且 web.config 在连接字符串中有训练服务器),我得到了 ol:
对象引用未设置为对象的实例。
然后,如果我进入 .RPT 文件,将数据源切换到训练服务器,然后尝试再次打开它,它工作正常。为什么上面的代码没有覆盖 .RPT 文件数据源?
在将报告从服务器迁移到服务器时,如何避免打开每个 .RPT 并更改数据源? .RPT 文件中是否有我缺少的设置?
【问题讨论】:
标签: .net asp.net vb.net crystal-reports reportviewer