Ошибка CrystalReports из службы. (Не удалось загрузить информацию базы данных.) - PullRequest
0 голосов
/ 09 января 2020

У меня есть многочисленные отчеты, которые ранее извлекали данные из источника ODB C в устаревшем настольном приложении. Сейчас я пытаюсь заполнить эти отчеты в службе C#. net, загрузив данные в DataTable.

Код отлично работает в приложении windows, но не в службе.

Я попытался скомпилировать как x86, так и x64 для службы, а также запустить службу так же пользователь, который используется для запуска настольного приложения.

Фрагмент:

ReportDocument rd = new ReportDocument();

StreamReader sr = new StreamReader(@"C:\infile.txt");

DataTable dt = new DataTable("REPORTTABLE");

string[] columnNames = new string[3];

columnNames[0] = "COL1";
columnNames[1] = "COL2";
columnNames[2] = "COL3";

foreach (string colName in columnNames)
{
   dt.Columns.Add(colName);
}

int i = 0;

DataRow dr;
string[] fields = new string[3];

while (!sr.EndOfStream)
{
   fields[i] = sr.ReadLine();
   i++;
}
dt.Rows.Add(fields);
sr.Close();

rd.Load(@"C:\report.rpt");
rd.SetDataSource(dt);

Исключение выдается в SetDataSource (). Имена столбцов и таблицы данных совпадают с теми, что были проверены ранее с источником данных ODB C. Входными данными является строка на столбец в текстовом файле, например

data1 data2 data3

Исходная ошибка:

Error in File marriage 18884_5280_{F58B98C0-1D10-462C-98F8-88974D74BFF8}.rpt:
Failed to load database information.

Трассировка стека:

   at CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(Exception e)
   at CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSourceInternal(Object val, Type type)
   at CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSource(DataSet dataSet)
   at WindowsService1.Service1.OnTimer(Object sender, ElapsedEventArgs args) in C:\Users\himik\source\repos\WindowsService1\WindowsService1\Service1.cs:line 432

Заранее спасибо.

1 Ответ

0 голосов
/ 10 января 2020

Хорошо, после запуска Process Explorer я нашел решение. Несмотря на то, что тестирование выполнялось на x86 и x64, и это не имело никакого значения, я обнаружил, что с Crystal он по-прежнему выбирает библиотеки x86, если вы выберете опцию «Предпочитать 32-битную» в свойствах Build проекта. Отключение этой опции означает, что была использована правильная библиотека для среды (x64 в моем случае), и отчет работает правильно.

...