2015-10-20 1 views
0

Дизайнер отчетов создает кристальный отчет в дизайнере с прямым подключением к базе данных с подключением ODBC (DSN). Те же отчеты выполняются через приложение Winform (C#) через DSN и предоставляют сервер базы данных, базу данных, идентификатор пользователя и пароль.Отчет, запрашивающий вход в базу данных при установке DataTable как DataSource

Мне нужно внести такие изменения в объект Crystal Report. ReportDocument не должен напрямую подключаться к базе данных через DSN. Вместо этого мы будем передавать данные через службу, вызывая соответствующую хранимую процедуру и параметры как System.Data.DataTable. Этот объект DataTable должен использоваться для заполнения/создания отчетов.

Я получаю хранимую процедуру и информацию о параметрах от ReportDocument.DataBase.Tables[I].Location и ReportDocument.DataDefinition объекта соответственно. После установки DataSource с помощью ReportDocument.DataBase.Tables[I].SetDataSource(DataTable) он по-прежнему запрашивает учетные данные для базы данных/сервера и пользователя для подключения к серверу.

Можно ли создать сценарий и заполнить отчет таблицей в памяти вместо прямого подключения к базе данных через ODBC?

ответ

0

Две вещи, которые нужно сосредоточиться на:

  1. Вы подключаетесь к же сервера и базы данных имя, которые были использованы для разработки отчета.
  2. Вы подключаете к базе другую базу или сервер.

Сценарий 1: Тот же сервер и имя базы данных

В этом случае вам необходимо ввести учетные данные, используя SetDatabaseLogon метод следующим

'crDoc1 is your ReportDocument 
'dtDataTable is your DataTable 

'set database logon info 
crDoc1.SetDatabaseLogon("db_user_name", "db_password", "db_server_name_or_ip", "database_name"); 

'set DataTable as DataSource 
crDoc1.SetDataSource(dtDataTable) 

Сценарий 2: Различные сервера или имя базы данных

В этом случае вам необходимо предоставить учетные данные нам ING ApplyLogOnInfo метода

ConnectionInfo crConInfo = new ConnectionInfo(); 
TableLogOnInfo crTblLogonInfo = new TableLogOnInfo(); 

crConInfo.ServerName = "db_server_name_or_ip"; 
crConInfo.DatabaseName = "database_name"; 
crConInfo.UserID = "db_user_name"; 
crConInfo.Password = "db_password"; 

'crDoc1 is your ReportDocument 
'dtDataTable is your DataTable 

'Set DataSource to your DataTable 
crDoc1.SetDataSource(dtDataTable) 

'after setting the DataSource apply Logon credentials to each table in ReportDocument 
Tables CrTables = crDoc1.Database.Tables; 
foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables) { 
    crTblLogonInfo = CrTable.LogOnInfo; 
    crTblLogonInfo.ConnectionInfo = crConInfo; 
    CrTable.ApplyLogOnInfo(crTblLogonInfo); 
} 
crDoc1.Refresh(); 
CrystalReportViewer1.ReportSource = crDoc1; 

Примечания: Если у вас есть какая-либо суб отчеты, вам необходимо применить SetDatabaseLogon и/или ApplyLogOnInfo весь подотчет и их таблицы соответственно.

UPDATE:
Применение ApplyLogOnInfo к Subreports

foreach (ReportDocument srSubReport in crDoc1.Subreports) { 
    foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in srSubReport.Database.Tables) { 
     crTblLogonInfo = CrTable.LogOnInfo; 
     crTblLogonInfo.ConnectionInfo = crConInfo; 
     CrTable.ApplyLogOnInfo(crTblLogonInfo); 
    } 
} 
+0

Почему мне нужно предоставлять информацию подключения к базе данных, когда данные I уже доступны в DataTable? – Nps

+0

Свойство безопасности CR для защиты данных от несанкционированного доступа. Учетные данные БД, такие как пароли, не сохраняются в отчетах. Когда вы создаете структуру таблицы Crystal report, поля, их тип и размер, отношения и т. Д. Встроены в отчет, используя текущее соединение с базой данных и logininfo. Когда вы укажете свои собственные отключенные данные (DataTables), новая информация о схеме должна совпадать с существующей. У вас может быть идея, просто взглянув на SQL-запрос Crystal Report? Таким образом, для данных, проверки и безопасности базы данных вам придется указывать ее каждый раз при загрузке CR. – haraman

+0

Также отключены данные, такие как структура таблицы данных DataTable и данные только. В них нет базы данных, сведений о подключении. – haraman

Смежные вопросы