Я использую CR XI и обращаюсь к файлам .RPT через ReportViewer на моих страницах ASP.NET.
Я уже получил следующий код, который должен динамически устанавливать источник данных отчета.
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 и открываю раздел «Эксперт базы данных», очевидно, что там все еще жестко прописаны имена серверов, и приведенный выше код, по-видимому, не способен изменить жестко закодированные имена серверов. .
Я говорю это, потому что у меня есть учебная и производственная среда. Когда файл .RPT жестко запрограммирован на моем производственном сервере, и я открываю его на своем обучающем сервере с помощью приведенного выше кода (и в файле подключения у web.config имеется обучающий сервер), я получаю ol:
Ссылка на объект не установлена для экземпляра объекта.
А потом, если я захожу в файл .RPT, переключаю источник данных на обучающий сервер и пытаюсь открыть его снова, он работает нормально. Почему приведенный выше код не перезаписывает источник данных файлов .RPT?
Как мне избежать необходимости открывать каждый .RPT и изменять источник данных при переносе отчетов с сервера на сервер? Есть ли в файле .RPT параметр, который мне не хватает или что-то в этом роде?