Этот вопрос для людей, имеющих опыт работы с CR.Кристальный отчет и проблема с подключением
У меня проблема с установочным соединением с Crystal report. Я получил отчет от моего клиента. Структура базы данных такая же на его и на моем сервере. Но имя сервера и db отличается. Он использует команду «Command» для создания отчета (добавить команду в поля Database-> Database Expert ...). Эта команда имеет некоторую функцию для возврата данных. Я пытаюсь запустить этот отчет на своем компьютере, и у меня есть проблема, когда я пытаюсь выполнить TestConnectivity(). Этот метод возвращает false. Я пытаюсь отлаживать, и я обнаружил, что после применения внутреннего объекта ApplyLogOnInfo() RasTable имеет старое ConnectionInfo.
Я использую следующий код для установленного соединения:
private void ApplyConnection(ReportDocument report, ConnectionInfo connectionInfo)
{
ApplyLogOnInfo(report, connectionInfo);
ApplyLogOnInfoForSubreports(report, connectionInfo);
}
private void ApplyLogOnInfo(ReportDocument reportDocument, ConnectionInfo connectionInfo)
{
foreach (Table table in reportDocument.Database.Tables)
{
table.LogOnInfo.ConnectionInfo.AllowCustomConnection = true;
TableLogOnInfo tableLogonInfo = table.LogOnInfo;
tableLogonInfo.ConnectionInfo = connectionInfo;
table.ApplyLogOnInfo(tableLogonInfo);
_log.InfoFormat("Table connection state: TableName = {0}, IsConnect = {1}", table.Name, table.TestConnectivity());
}
}
private void ApplyLogOnInfoForSubreports(ReportDocument reportDocument, ConnectionInfo connectionInfo)
{
Sections sections = reportDocument.ReportDefinition.Sections;
foreach (Section section in sections)
{
ReportObjects reportObjects = section.ReportObjects;
foreach (ReportObject reportObject in reportObjects)
{
_log.InfoFormat("Type = {0}, Name = {1}",reportObject.Name, reportObject.Kind);
if (reportObject.Kind == ReportObjectKind.SubreportObject)
{
var subreportObject = (SubreportObject)reportObject;
ReportDocument subReportDocument = subreportObject.OpenSubreport(subreportObject.SubreportName);
ApplyLogOnInfo(subReportDocument, connectionInfo);
}
}
}
}
Так что мои вопросы:
- Как я могу установить правильное соединение с Command?
- Почему я не могу изменить соединение? (если отчет был создан на другом сервере).