После расходов хороших 3 - 4 часы на Google, пытающемся найти любое решение моей проблемы, у меня не было большой удачи.
В основном мы используем кристаллические отчеты для наших приложений.NET с бэкэндом SQL-сервера, у нас есть многие клиенты каждый с их собственным сервером и таким образом, нашим отчетам нужно было установить их соединения динамично. Вплоть до неделю назад этого хорошо работал. Однако несколько дней назад клиент сообщил, что они получали приглашение ко входу в систему базы данных для отчета (только один отчет, остальные хорошо работали). Мы были вполне озадачены, но нам удалось воспроизвести его на нетбуке, которому не установили Visual Studio или SQL-сервер. В конце dev решил воспроизвести отчет в надежде, это была просто причуда в том конкретном отчете.
К сожалению, новый клиент сегодня также испытал ту же проблему, но на этот раз для каждого кристаллического отчета они имели - и также они работали над нетбуком, таким образом, мы действительно вполне потеряны здесь.
Ниже снимок экрана того, что наши клиенты представлены с -
и вот код, который я использую для установки информации о соединении в отчете
cI.ServerName = (string)builder["Data Source"];
cI.DatabaseName = (string)builder["Initial Catalog"];
cI.UserID = (string)builder["User ID"];
cI.Password = (string)builder["Password"];
foreach (IConnectionInfo info in cryRpt.DataSourceConnections)
{
info.SetConnection(cI.ServerName, cI.DatabaseName, cI.UserID, cI.Password);
}
foreach (ReportDocument sub in cryRpt.Subreports)
{
foreach (IConnectionInfo info in sub.DataSourceConnections)
{
info.SetConnection(cI.ServerName, cI.DatabaseName, cI.UserID, cI.Password);
}
}
Как всегда, любая справка очень ценится.
Решение найдено, оказалось, что построитель соединений, который клиент использовал для настройки своей системы, не вводил имя экземпляра. Скорее всего, приложение .net отлично с этим работало. Однако теперь отсортированные отчеты с кристаллами работают безупречно.
Спасибо за ваш вклад, Крейг.
Возможно, проблема в том, как вы задали информацию для аутентификации. Рассматривали ли вы возможность использования метода ReportDocument.SetDatabaseLogon ? Вызывайте его один раз для каждого уникального соединения с БД в отчете. Это избавит от необходимости перечислять все таблицы в отчете, а также, насколько я помню, нумеровать таблицы подотчетов.